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

时间:2016-10-15 18:13:32

标签: ios swift uicollectionview

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

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

  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是我正在尝试删除的正确索引。我不完全理解错误消息的含义。

2 个答案:

答案 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时都要将其作为规则,在更新之前更新数据数组。希望有所帮助