使用刷新器时集合视图索引超出范围
Collection view index out of range when using refresher
我正在将图像数组加载到 CollectionView
。
当我激活刷新器时,我调用了这个方法:
func fetchPics(){
//Clear array of post
pics?.removeAll()
Common.sharedInstance.fetchPics(completion: { (pics) in
self.pics = pics
self.collectionView?.reloadData()
self.refresher.endRefreshing()
})
}
视图控制器的 viewDidLoad
调用此方法,一切正常加载;然而,从复习中调用它给我一个:
fatal error: Index out of range
错误:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: postCellId, for: indexPath) as! PicCell
//This is the line that gives me the error
cell.pic = pics?[(indexPath as NSIndexPath).item]
return cell
}
重新加载集合视图而不出现此错误的正确方法是什么?
谢谢
尝试将 pics?.removeAll()
也放在完成块中,因为您的关闭代码将稍后执行,如果您的 collectionView
可能被调用 cellForItemAt indexPath
,您将得到空数组。
func fetchPics(){
Common.sharedInstance.fetchPics(completion: { (pics) in
pics?.removeAll()
self.pics = pics
self.collectionView?.reloadData()
self.refresher.endRefreshing()
})
}
注意: 如果您不调用 removeAll
这也将起作用,因为您正在使用新值再次初始化数组。
因为我调用了 class 的共享实例,我在其中进行了数据库调用。在那个 class 中,我创建了一个 pics 数组的实例,然后我在其中返回通过完成块。
我没有在 fetchPics 方法中调用 pics?.removeAll
,所以它每次都附加到它。
感谢大家提供指导,得出这个答案
我正在将图像数组加载到 CollectionView
。
当我激活刷新器时,我调用了这个方法:
func fetchPics(){
//Clear array of post
pics?.removeAll()
Common.sharedInstance.fetchPics(completion: { (pics) in
self.pics = pics
self.collectionView?.reloadData()
self.refresher.endRefreshing()
})
}
视图控制器的 viewDidLoad
调用此方法,一切正常加载;然而,从复习中调用它给我一个:
fatal error: Index out of range
错误:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: postCellId, for: indexPath) as! PicCell
//This is the line that gives me the error
cell.pic = pics?[(indexPath as NSIndexPath).item]
return cell
}
重新加载集合视图而不出现此错误的正确方法是什么?
谢谢
尝试将 pics?.removeAll()
也放在完成块中,因为您的关闭代码将稍后执行,如果您的 collectionView
可能被调用 cellForItemAt indexPath
,您将得到空数组。
func fetchPics(){
Common.sharedInstance.fetchPics(completion: { (pics) in
pics?.removeAll()
self.pics = pics
self.collectionView?.reloadData()
self.refresher.endRefreshing()
})
}
注意: 如果您不调用 removeAll
这也将起作用,因为您正在使用新值再次初始化数组。
因为我调用了 class 的共享实例,我在其中进行了数据库调用。在那个 class 中,我创建了一个 pics 数组的实例,然后我在其中返回通过完成块。
我没有在 fetchPics 方法中调用 pics?.removeAll
,所以它每次都附加到它。
感谢大家提供指导,得出这个答案