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()。我需要想清楚为什么会这样,但这解决了问题