使用刷新器时集合视图索引超出范围

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,所以它每次都附加到它。

感谢大家提供指导,得出这个答案