-[UICollectionView _endItemAnimations] 中的 UICollectionView 断言失败

Posted

技术标签:

【中文标题】-[UICollectionView _endItemAnimations] 中的 UICollectionView 断言失败【英文标题】:UICollectionView assertion failure in -[UICollectionView _endItemAnimations] 【发布时间】:2015-03-23 04:50:07 【问题描述】:

长话短说,我只是这样做:

NSIndexPath *indexPath = [NSIndexPath indexPathForItem:insPoint inSection:0];
[self.m_orders insertObject:orderRecord atIndex:insPoint];
[self.m_collectionView insertItemsAtIndexPaths:[NSArray arrayWithObject:indexPath]];


Invalid update: invalid number of items in section 0.  The number of items contained in an existing section after the update (2) must be equal to the number of items contained in that section before the update (2), plus or minus the number of items inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of items moved into or out of that section (0 moved in, 0 moved out).

如果我将其更改为 reloadData 没有问题,但这并不理想。

如果我连续调用它会崩溃。如果只是一次,那么没有任何问题。

我在这里遗漏了什么吗?我以为数字匹配?这里有什么问题?

【问题讨论】:

参考链接(提供与您的问题相关的信息)***.com/questions/19199985/… 【参考方案1】:

您能否确认您确实在insertItemsAtIndexPaths: 通话中崩溃了?假设是,错误代码特别告诉您,当您在集合视图上调用 insertItemsAtIndexPaths: 时,该部分中的项目数没有改变。您能否发布您的集合视图数据源方法(例如collectionView:numberOfItemsInSection:),以便我们确认您处理正确?

另外,你能确认这一切都发生在主线程上吗?如果是这样,这里发生了两件事之一: 1) 在此代码被命中之前,您正在其他地方修改您的数据源。 2) 在此代码被命中之前,您正在执行其他集合视图更新(插入/删除)。

【讨论】:

是的,我在那个电话上崩溃了。 - (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section return self.m_orders.count; 这一切都发生在主线程上。正如您所说,我相信在 self.m_orders 其他地方可能有一些数据被移动(删除了一个对象),因此当插入代码被命中时,就会出现错误。不过,当我有时间时,我将不得不仔细看看,现在我正在使用 reloadData。非常感谢您就它为什么坏了的建议!

以上是关于-[UICollectionView _endItemAnimations] 中的 UICollectionView 断言失败的主要内容,如果未能解决你的问题,请参考以下文章

在MySQL中尝试Forward Engineering时出错1064

英语高手请进

简易先进先出队列-自用

函数参数

多重背包

合租房合同模板