【问题标题】:Swift CollectionView Deletion ExceptionSwift CollectionView 删除异常
【发布时间】:2019-05-05 16:01:34
【问题描述】:

我正在尝试使用此代码删除 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
    }
}

究竟是什么导致了这个异常? 在此先感谢:)

【问题讨论】:

    标签: ios swift collectionview


    【解决方案1】:

    您的问题可能是由于您没有正确处理从数据源中删除的事实。

    正确的做法是在更新块内删除数据源,否则您可以在更新块外进行更改,但要确保在更新开始之前 UI 匹配(重新加载)(您已经这样做了)不是)。

    尝试在更新块内移动myDataSourceArray.remove(at:index)

    https://developer.apple.com/documentation/uikit/uicollectionview/1618045-performbatchupdates

    另一件事可能不会导致问题,但无论如何你都应该处理(我没有看到你在这里做),必须手动删除部分。如果您的删除操作导致某个部分的最后一个单元格被删除,您还必须使用deleteSections(:) 删除该部分。

    【讨论】:

    • 其实,我尝试将删除语句放在块内,它也没有工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 2011-11-12
    • 2013-03-09
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多