将第一个单元格插入集合视图会导致断言失败

时间:2015-03-31 21:05:40

标签: ios uicollectionview

如果我在0个部分和0个项目时尝试将项目插入UICollectionView,则会出现断言失败。

  

***由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'无效更新:无效   部分数量。集合中包含的节数   更新后的视图(1)必须等于部分的数量   更新前的集合视图中包含的内容(0),加号或减号   插入或删除的部分数量(插入0,删除0)。'

经典。问题是,我正在修改我的数据源,然后直接插入项目。 showFirstCell属性在所有必要的数据源方法中进行检查,并且不会在其他任何地方进行修改。

self.showFirstCell = true
self.collectionView.insertItemsAtIndexPaths([NSIndexPath(forItem: 0, inSection: 0)])

performBatchUpdates中包含此内容不会改变任何内容。

我希望以动画方式添加此项目。我认为我不应该首先检查是否有项目已经存在,但这样做并且调用reloadData确实有效,但它并不完美。

3 个答案:

答案 0 :(得分:1)

您的部分数量不匹配。

一旦您决定输入UICollectionView部分,您也应该在numberOfSections函数中返回相同的数字。

现在发生的是你插入一个单元格,它再次调用你的numberOfSections函数,你仍然返回0,并且它会立即崩溃。

答案 1 :(得分:0)

它之所以不起作用并且给您错误的原因是因为您的numberOfSections设置为0并且在添加单元格时它还没有更新。

要解决此问题,只需创建(如果您还没有)NSMutableArray,而numberofSections,则返回mutableArray。然后,无论何时向collectionView添加对象,只需将对象添加到mutableArray个部分。

接下来最重要的部分是:只要您更改,添加或删除collectionView中的内容,只需执行beginUpdatendUpdate

答案 2 :(得分:-1)

  

如果要从CollectionView插入项目,则需要   从数组中的数据源插入该项。在这个例子中,我将项目插入myArray   然后我也将它插入myCollectionView。它的工作原因是因为   数组(数据源)中的项目总数等于   collectionView中的项目数。

myArray.insert(valuetoinsert, atIndex: 0)
let path:NSIndexPath = NSIndexPath.init(row: 0, section: 0)
myCollectionView.insertItems(at: [path as IndexPath])