[英]Swift CollectionView Deletion Exception
我正在尝试使用以下代码删除collectionView单元格:
myDataSourceArray.remove(at:index)
collectionView.performBatchUpdates({
collectionView.deleteItems(at: [indexPath])
}
, completion: nil)
它是非常直接的删除,并在尝试删除第1节中的任何单元格后,它会导致此异常:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第1节中的无效项目数。更新后的现有部分中包含的项目数(2)必须等于该项目中包含的项目数更新前的部分(2),加上或减去从该部分插入或删除的项目数(插入0,删除1),加上或减去移入或移出该部分的项目数量(0移入,0移动)出)。”
我的单元格的collectionView分布是每个部分包含2个单元格,如下图所示
对于最后一节,如果它包含1个单元格,它将包含1个单元格
func collectionView(_ collectionView: UICollectionView,
numberOfItemsInSection section: Int) -> Int {
if myDataSourceArray.count%2==1 && myDataSourceArray.count/2 == section {
return 1
}else{
return 2
}
}
究竟是什么导致了这个异常 提前致谢 :)
您的问题可能是由于您没有正确处理数据源中的删除。
正确的方法是在更新块内部删除数据源,否则您可以在更新块之外进行更改,但确保UI在更新开始之前匹配(重新加载)(您没有)。
尝试在更新块内移动myDataSourceArray.remove(at:index)
。
https://developer.apple.com/documentation/uikit/uicollectionview/1618045-performbatchupdates
另一件可能不会引起问题但你应该处理的事情(我没有看到你在这里做),必须手动删除部分。 如果删除操作导致删除某个部分的最后一个单元格,则必须使用deleteSections(:)
删除该部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.