2017-04-10 18 views
0

ユーザーがUITableViewの一番下に来ると、私は自分のUITableViewにさらに多くの行を追加しようとしています。私はより多くのデータを呼び出すために一番下までスクロールしてみたらしかし、私が言うのエラーが表示されます。ここでは改ページ時にUITableViewに行を追加するには?

fatal error: Index out of range 

は私のコードです:

func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    let contentOffset = scrollView.contentOffset.y 
    let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height; 
    if !isLoadingMore && (maximumOffset - contentOffset <= threshold) { 
     self.isLoadingMore = true 

     DispatchQueue.main.async() { 
      self.fetchMovieData() 
      self.isLoadingMore = false 
     } 
    } 
} 

私もどのように多くの行を追跡していますより多くのデータが呼び出されるように私のテーブルビューは、私のROWNUMBER数に加えるに追加された:

:私は私の要求を作っていますのはここ

var rowNumber: Int = 0 

です

self.tableView.reloadData() 

より多くのデータや、私が欠けているものがあると私のテーブルビューを追加するために:

func fetchMovieData(_ url: String,_ params: Dictionary<String, String>) { 
     if more { 
      Alamofire.request(url, parameters: params) 
       .responseJSON { 
        response in 
        switch response.result { 
        case .success(let value): 
         self.currentPageNumber += 1 
         let json = JSON(value) 
         self.movieObject = [MovieModel.init(data: json)] 
         self.rowNumber += self.movieObject[0].movieList[0].movieDict.count 
         self.tableView.reloadData() 
        case .failure(let error): 
         print(error) 
       } 
      } 
     } 
    } 

は、だから私は、私の質問は、私が呼び出しされなければならないですね?

+0

まあ、これはそれを行う必要があります。これはこれで、あなたの機能を置き換えるためにしようと解決するために

。あなたの問題はここにあるようです: 'self.movi​​eObject = ...' - 古いモデルを置き換えて新しいモデルを作成します。新しいデータを追加できるように、モデルオブジェクトを構築する必要があります。 – Losiowaty

答えて

2

問題は、古いデータを新しいデータに置き換える代わりに、配列にデータを追加するのではなく、配列の数を10に保ちますが、行の数が増えるためです。例えば配列[11]にアクセスしようとしていても、その配列に10個の要素しかないので、範囲エラーが発生します。

func fetchMovieData(_ url: String,_ params: Dictionary<String, String>) { 
    if more { 
     Alamofire.request(url, parameters: params) 
      .responseJSON { 
       response in 
       switch response.result { 
       case .success(let value): 
        self.currentPageNumber += 1 
        let json = JSON(value) 
        let newArray = [MovieModel.init(data: json)] 
        for i in newArray { 
        self.movieObject.append(i) 
        } 
        self.movieObject = [MovieModel.init(data: json)] 
        self.rowNumber += self.movieObject[0].movieList[0].movieDict.count 
        self.tableView.reloadData() 
       case .failure(let error): 
        print(error) 
      } 
     } 
    } 
} 
+0

まさに正しい。私はロジックをいくつか調整しなければなりませんでしたが、これは正しい答えでした。ありがとうございました! –

関連する問題