我允许用户在我的集合视图中选择/取消选择单元格,然后点击保存/删除按钮。
当我选择行时,我将它们添加到词典
var selectedIndexes = Dictionary<IndexPath, String> ()
当我取消选择该行时,我设置selectedIndexes [indexPath] = nil
当用户点击删除时,我运行
for index in selectedIndexes.keys {
indexesToDelete.append(index)
}
collectionView.deleteItems(at: indexesToDelete)
这将进入selectedIndexes字典,抓取索引,将这些索引添加到索引数组“indicesToDelete”中,然后在forloop结束后,我将删除该索引数组。
当我跑步时,我得到:
因未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0部分中的项目数无效。更新后的现有部分中包含的项目数(5)必须等于项目数在更新(5)之前包含在该部分中,加上或减去从该部分插入或删除的项目数(0插入,2删除)和加或减移入或移出该部分的项目数(0移入,0搬出去。'
我已经打印出所有内容,而indexToDelete是我正在尝试删除的正确索引。我不完全理解错误消息的含义。
答案 0 :(得分:1)
它的含义是您的收藏视图不再与您的数据源同步。因此,您还需要更新您用作dataSource的内容以反映您的更改,然后调用deleteCells。
答案 1 :(得分:0)
for index in selectedIndexes.keys {
indexesToDelete.append(index)
}
yourCollectionViewDataSourceArray.remove(at: index)
collectionView.deleteItems(at: indexesToDelete)
如果您的collectionView数据源是yourCollectionViewDataSourceArray,则两者都会同步在一起。每次collectionView重新加载数据时,它都会使用带参数numberOfItemsInSection的函数。当它发现你的array.count与删除后的项目总数不同时会给你这个错误。每次要按代码更新collectionView时都要将其作为规则,在更新之前更新数据数组。希望有所帮助