2015-03-31 30 views
0

如果我尝试在有0个部分和0个项目时将项目插入到UICollectionView中,则会出现断言失败。将第一个单元格插入到集合视图导致断言失败

***终止应用程序由于未捕获的异常“NSInternalInconsistencyException”,理由是:“无效的更新:无效 节数。更新(1)后集合 视图中包含的部分数量必须等于更新前的集合视图中包含的部分数量 (0),正数或负数 插入或删除的部分数(0插入,0删除)。'

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

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

包装在performBatchUpdates没有改变。

我想要以动画形式添加此项目。我认为我不应该首先检查是否有物品已经到位,但是这样做并且呼叫reloadData可以起作用,但它并不完美。

回答

1

您的节数不匹配。

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

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

+1

呵呵。您必须插入一个部分以及一行。当然,非常感谢。在〜5分钟内回答接受。 – Acey 2015-03-31 21:15:29

+0

@Acey真棒。祝你有个好的一天。干杯 – 2015-03-31 21:16:15

0

它没有工作,并给你一个错误的原因是因为你的numberOfSections设置为0,当你添加单元时,它没有更新。

要解决该问题,只需创建(如果您还没有)NSMutableArraynumberofSections,请返回mutableArray。然后,无论何时将对象添加到collectionView,只需将对象添加到部分的mutableArray即可。

接下来也是最重要的部分是:无论何时您更改,添加或删除collectionView中的某些内容,只需执行beginUpdatendUpdate即可。

-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]) 
相关问题