2017-10-09 9 views
3

私のiosアプリケーションコードをSwift 4に移行し、コレクションビューのデータのリロード方法が機能しません。私は何かを探して試したが、誰も働かなかった。それはSwift 3で一ヶ月以上完璧に動作していたので、何が起きているのか分かりません。ボタンがクリックされたときに、私は、この関数を呼び出すUICollectionViewのリロードデータが速く動作しません4

private func setLevelLessons(){ 
     let operationsDB = DBOperations() 
     self.indexInformation = operationsDB.getIndex(forLevel: self.currentLevel) 
     self.numLessons = (self.indexInformation?.count)! 
     DispatchQueue.main.async { 
      self.lessonsCollectionView.reloadData() 
     } 
    } 

このコードは、例1のためです。クリックすると、データベースからデータを取得し、コレクションビューを再読み込みします。私はデータが正しいかどうかを確認したので、それは問題ではありません。

次のメソッドが呼び出され、そして(ボタンで二必要はない、画面内に関係なく)第一および第二のクリックで呼び出されたときに私が起こって何ができるか

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

を項目を印刷?

+0

その値が正しい@SalmanGhumsani、私は 'numLessons'変数からそれを得るあなたの' numOfRowAtIndexPath'リターン回数 –

+0

を確認してください。 – CipherCit

+0

私は同様の効果があり、私にとっては_ [collectionView reloadData] _の前に_ [collectionView.collectionViewLayout invalidateLayout] _ _しました。私の場合、collectionview-viewcontroller(obj-c)は、スクロールビューコントローラの子ビューコントローラです。 – Apoc

答えて

0

問題を解決しました。

Swift4とXcode 9.0にアップデートするとこの問題が発生しましたが、今日はXcodeを9.0.1バージョン(昨日リリース)にアップグレードし、collectionView.reloadData()が再び動作しています。あなたがこの問題を抱えていれば、あなたは最後のXcodeバージョンを持っていることを確認するか、次のバージョンがリリースされるまで待ってください。

+0

まだXcode 9.2、swift 4にあります –

0

swift4(Xcode 9)の一時的な解決策です。

DispatchQueue.main.async { 
    let numberOfItems = collectionView.numberOfItems(inSection: 0) 
    let indexPaths = [Int](0..<numberOfItems).map{ IndexPath(row: $0, section: 0) } 
    collectionView.reloadItems(at: indexPaths) 
} 
+0

Xcode 9.2、swift 4 –

関連する問題