我将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
可能会发生什么?
答案 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)
}