一次删除集合视图中的多个单元格存在问题



我允许用户在集合视图中选择/取消选择单元格,然后点击保存/删除按钮。

当我选择行时,我将它们添加到字典

  var selectedIndexes = Dictionary<IndexPath, String> ()

当我取消选择行时,我设置selectedinindexes [indexPath] = nil

当用户点击删除时,我运行

    for index in selectedIndexes.keys {
        indexesToDelete.append(index)
    }
    collectionView.deleteItems(at: indexesToDelete)

这将进入selectedinindexes字典,获取索引,将这些索引添加到索引数组"indexesToDelete"中,然后在forloop结束后,我将删除索引数组。

当我运行这个时,我得到:

由于未捕获异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的项数无效。

更新(5)后现有部分中包含的项数必须等于更新(5)前该部分中包含的项数,加上或减去从该部分插入或删除的项数(0插入,2删除),加上或减去进入或退出该部分的项数(0移进,0移出)。

我已经打印出来的一切和indexesToDelete是正确的索引,我想删除什么。我不完全明白错误信息在说什么。

它的意思是您的集合视图不再与数据源同步。所以你还需要更新你所使用的数据源来反映你的变化然后调用deleteCells。

for index in selectedIndexes.keys {
        indexesToDelete.append(index)
    }
yourCollectionViewDataSourceArray.remove(at: index)
collectionView.deleteItems(at: indexesToDelete)

如果你的collectionView数据源是你的collectionviewdatasourcearray,两者将同步在一起。每次collectionView重新加载数据时,它都会使用带参数numberOfItemsInSection的函数。当它发现你的数组。计数与删除后的项目总数不同,它会给您这个错误。把它作为一个规则,每次你想通过代码更新你的collectionView时,在更新它之前先更新数据数组。希望对大家有所帮助

最新更新