如果我在0个部分和0个项目时尝试将项目插入UICollectionView
,则会出现断言失败。
***由于未捕获的异常'NSInternalInconsistencyException'而终止应用,原因:'无效更新:无效 部分数量。集合中包含的节数 更新后的视图(1)必须等于部分的数量 更新前的集合视图中包含的内容(0),加号或减号 插入或删除的部分数量(插入0,删除0)。'
经典。问题是,我正在修改我的数据源,然后直接插入项目。 showFirstCell属性在所有必要的数据源方法中进行检查,并且不会在其他任何地方进行修改。
self.showFirstCell = true
self.collectionView.insertItemsAtIndexPaths([NSIndexPath(forItem: 0, inSection: 0)])
在performBatchUpdates
中包含此内容不会改变任何内容。
我希望以动画方式添加此项目。我认为我不应该首先检查是否有项目已经存在,但这样做并且调用reloadData
确实有效,但它并不完美。
答案 0 :(得分:1)
您的部分数量不匹配。
一旦您决定输入UICollectionView
部分,您也应该在numberOfSections
函数中返回相同的数字。
现在发生的是你插入一个单元格,它再次调用你的numberOfSections
函数,你仍然返回0,并且它会立即崩溃。
答案 1 :(得分:0)
它之所以不起作用并且给您错误的原因是因为您的numberOfSections
设置为0并且在添加单元格时它还没有更新。
要解决此问题,只需创建(如果您还没有)NSMutableArray
,而numberofSections
,则返回mutableArray
。然后,无论何时向collectionView
添加对象,只需将对象添加到mutableArray
个部分。
接下来最重要的部分是:只要您更改,添加或删除collectionView
中的内容,只需执行beginUpdat
和endUpdate
。
答案 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])