Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift UICollectionView.setCollectionViewLayout上的EXC\u错误\u访问错误_Swift_Uicollectionview_Uicollectionviewlayout - Fatal编程技术网

Swift UICollectionView.setCollectionViewLayout上的EXC\u错误\u访问错误

Swift UICollectionView.setCollectionViewLayout上的EXC\u错误\u访问错误,swift,uicollectionview,uicollectionviewlayout,Swift,Uicollectionview,Uicollectionviewlayout,这件事把我难住了 func updateCollectionView() { DispatchQueue.main.async { [weak self] in if let strongSelf = self { let layout = UICollectionViewFlowLayout() let minimumSpacing: CGFloat = 8 layout.minimumInteri

这件事把我难住了

func updateCollectionView() {
    DispatchQueue.main.async { [weak self] in
        if let strongSelf = self {
            let layout = UICollectionViewFlowLayout()
            let minimumSpacing: CGFloat = 8
            layout.minimumInteritemSpacing = minimumSpacing
            layout.minimumLineSpacing = minimumSpacing
            let dim = strongSelf.view.frame.width / CGFloat(strongSelf.size) - minimumSpacing
            layout.itemSize = CGSize(width: dim, height: dim)
            strongSelf.collectionView.setCollectionViewLayout(layout, animated: true)
            strongSelf.collectionView.reloadData()
        }
    }
}
当它尝试设置CollectionViewLayout时,我得到:

error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x800000000)

collectionView、strongSelf和layout都是有效对象。如果有帮助的话,只有当strongSelf.size小于4时才会发生这种情况。

这个对我来说很奇怪,但我用这位先生的帖子解决了这个问题:

基本上,我必须这样做:

strongSelf.gridCollectionView.reloadData()
strongSelf.gridCollectionView.collectionViewLayout.invalidateLayout()
strongSelf.gridCollectionView.setCollectionViewLayout(layout, animated: false)
重要的是,在setCollectionViewLayout之前需要重新加载Data()。我需要想清楚为什么会这样,但这解决了问题