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

Inserting the first cell into a collection view causes an assertion failure

如果我在有 0 个部分和 0 个项目时尝试将一个项目插入到 UICollectionView 中,我会遇到断言失败。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of sections. The number of sections contained in the collection view after the update (1) must be equal to the number of sections contained in the collection view before the update (0), plus or minus the number of sections inserted or deleted (0 inserted, 0 deleted).'

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

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

将其包装在 performBatchUpdates 中没有任何改变。

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

您的版块数量不匹配。

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

现在发生的事情是你插入一个单元格,它再次调用你的 numberOfSections 函数,你仍然 returning 0,它立即崩溃。

它不起作用并给你一个错误的原因是你的 numberOfSections 设置为 0 并且当你添加单元格时它还没有更新。

要解决这个问题,只需创建(如果您还没有)一个 NSMutableArray,对于 numberofSections,return mutableArray。然后,每当您将对象添加到 collectionView 时,只需将对象添加到 mutableArray 部分。

接下来也是最重要的部分是:任何时候从 collectionView 更改、添加或删除某些内容时,只需执行 beginUpdatendUpdate

If you want to insert item from your CollectionView, you need to insert that item from your data source which is in your array. In this example I inserted the item to myArray then I inserted it also to myCollectionView. It's working because the total number of items from your array (data source) is equal to the number of items in the collectionView.

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