我的代码:
DataService.dataService.fetchDataFromServer { (channel) in
self.channels.append(channel)
let indexPath = IndexPath(item: self.channels.count - 1, section: 0)
self.collectionView?.insertItems(at: [indexPath])
}
从服务器功能获取数据:
func fetchDataFromServer(callBack: @escaping (Channel) -> ()) {
DataService.dataService.CHANNEL_REF.observe(.childAdded, with: { (snapshot) in
let channel = Channel(key: snapshot.key, snapshot: snapshot.value as! Dictionary<String, AnyObject>)
callBack(channel)
})
}
项目数量部分:
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of items
return 0
}
完整错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'attempt to insert item 0 into section 0, but there are only 0 items in section 0 after the update'
我正在使用集合视图,并且不知道为什么会出现此错误。
任何帮助将不胜感激!
答案 0 :(得分:2)
你的numberOfItemsInSection
返回0,所以当告诉集合视图你正在添加一个项目时,当这个方法表明集合中仍然有0个项目时会感到沮丧。
您的代码甚至有评论// #warning Incomplete implementation, return the number of items
您可能需要以下内容:
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.channels.count
}
答案 1 :(得分:1)
我遇到了同样的问题,并修复了[unown self]闭包问题,并强制在主线程上进行UI更新。另外,正如其他人所说,numberOfItemsInSection方法应该返回数组中的项目数。这是我的最终代码:
DataManager.fetchDish() { [unowned self] dish in
if let dish = dish {
DispatchQueue.main.async {
self.dishes.append(dish)
self.dishesCollectionView.insertItems(at: [IndexPath(row: self.dishes.count - 1, section: 0)])
}
}
}
答案 2 :(得分:0)
请确保您已连接数据源,这使我不寒而栗,因为它是如此基础,有时甚至您都不会考虑它。