2016-09-24 2 views
1

CollectionViewにイメージの配列をロードしています。コレクションビューのインデックスがリフレッシャーを使用しているとき

私は補習を有効にすると、私はこのメソッドを呼び出しています:

func fetchPics(){ 
     //Clear array of post 
     pics?.removeAll() 

      Common.sharedInstance.fetchPics(completion: { (pics) in 
      self.pics = pics 
      self.collectionView?.reloadData() 
      self.refresher.endRefreshing() 
     }) 
    } 

ビューコントローラのviewDidLoadは罰金この方法と、すべての負荷を呼び出します。

fatal error: Index out of range 

エラーに:しかし、復習からそれを呼び出すと、私に与え

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: postCellId, for: indexPath) as! PicCell 

     //This is the line that gives me the error 
     cell.pic = pics?[(indexPath as NSIndexPath).item] 

     return cell 
    } 

このエラーを取得せずにコレクションビューを再ロードする適切な方法は何ですか?

はあなたの閉鎖コードは、後に実行されますので、あなたcollectionViewあなたは空の配列を取得しているcellForItemAt indexPathを呼ぶかもしれない場合は、完了ブロック内でもpics?.removeAll()を配置しようとすると

+0

試し' cell.pic =写真をリードする指導のために君たちに感謝し、それは私が内部にそれを追加しようとした –

答えて

0

私はデータベース呼び出しを行うクラスの共有インスタンスを呼び出していました。そのクラスでは、次に完成ブロックを返すピクチャ配列のインスタンスを作成しました。

私はpics?.removeAllをfetchPicsメソッドの中で呼び出すのではなく、毎回それを追加していました。

は[indexPath.row] `?この回答へ

2

ありがとうございます。

func fetchPics(){ 

    Common.sharedInstance.fetchPics(completion: { (pics) in 

     pics?.removeAll() 
     self.pics = pics 
     self.collectionView?.reloadData() 
     self.refresher.endRefreshing() 
    }) 
} 

注:あなたも、あなたが新しい値で再配列を初期化しているのように動作しますremoveAllを呼び出さない場合。

+0

を動作するかどうかを確認し、今では写真アレイに追加ですそれをリロードするのではなく。好きなものにコンテンツを追加するように、すべてを削除してもそこにいないかのように。 @NiravD – Walker

+0

@Walker私は 'fetchPics'メソッドについての補完ブロックではないので、' pics?.removeAll() 'を補完ブロックから削除しても、' fetchPics'メソッドについてはまだ動作しません答えをもう一度読んでください。 –

+0

私は20分前に答えを掲載しました。ご協力ありがとうございます – Walker

関連する問題