有一个函数可以更新我的UICollectionView:
@objc func refreshFeed(sender:AnyObject)
{
fetchWeatherData()
}
private func fetchWeatherData() {
PostArray = [PostModel]()
offset = 0
self.fetchPost()
self.refreshControl.endRefreshing()
}
此函数使PostArray集合无效,并调用fetchPost功能区更新函数:
func fetchPost(URL: String){
ApiService.sharedInstance.fetchPost(url: URL, completion: { (Posts: [PostModel]) in
self.PostArray.append(contentsOf: Posts)
self.collectionView.reloadData()
})
}
更新集合后,函数:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! PostCell
cell.PostArray = PostArray[indexPath.item]
return cell
}
在以下行中给出错误消息:
Thread 1: Fatal error: Index out of range
:cell.PostArray = PostArray[indexPath.item]
为什么会这样呢?数据属于集合。
对不起我的英语不好
最佳答案
首先,检查func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
是否返回有效的项目数。
比起您可以检查PostArray
是否包含给定索引的项目:
如果PostArray.indices〜= indexPath.item {
cell.postArray = PostArray [indexPath.item]
}
并且您需要确保ApiService.sharedInstance.fetchPost
在主队列上运行completion
。如果没有,请尝试以下操作:
func fetchPost(URL:String){
ApiService.sharedInstance.fetchPost(url:URL,完成:{(帖子:[PostModel])在
self.PostArray.append(contentsOf:帖子)
DispatchQueue.main.async {
self.collectionView.reloadData()
}
})
}