UICollectionView重载数据在swift 4中不起作用

时间:2017-10-09 15:29:39

标签: ios swift uicollectionview

我将ios应用程序代码迁移到Swift 4并在我的集合视图中重新加载数据方法不起作用。我搜索并尝试了很多东西,但没有人工作。它在Swift 3中运行了一个多月,所以我不知道发生了什么。

此代码适用于以下情况之一:

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

单击按钮时调用此函数。单击时,我从数据库获取数据并重新加载集合视图。我检查了数据是否正确,这样就不是问题。

我在调用下一个方法时打印了项目,并在第一次和第二次点击时调用(按钮中不需要第二次,无论屏幕在哪里)

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

可能会发生什么?

2 个答案:

答案 0 :(得分:0)

问题解决了。

更新到Swift4和Xcode 9.0时遇到了这个问题,但今天我将Xcode升级到9.0.1版本(昨天发布),collectionView.reloadData()再次运行。因此,如果您遇到此问题,请确保您拥有最新的Xcode版本或等到下一个版本发布。

答案 1 :(得分: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)
}