UICollectionView 断言失败 -[UICollectionView _updateWithItems:tentativelyForReordering:]

Posted

技术标签:

【中文标题】UICollectionView 断言失败 -[UICollectionView _updateWithItems:tentativelyForReordering:]【英文标题】:UICollectionView Assertion failure in -[UICollectionView _updateWithItems:tentativelyForReordering:] 【发布时间】:2015-10-04 21:02:22 【问题描述】:

ios8.4。在设备而非模拟器上。

我收到了这个 carsh 错误;

Assertion failure in -[UICollectionView _updateWithItems:tentativelyForReordering:], /SourceCache/UIKit/UIKit-3347.44.2/UICollectionView.m:4563

当我打电话时

NSArray* array_indexPaths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:1 inSection:0]];
[self.collectionView reloadItemsAtIndexPaths:indexPaths];

已尝试将上述内容放在里面 [self.collectionView performBatchUpdates:^ 没有运气。

是否有其他人经历过这种情况或知道为什么会发生这种情况?

【问题讨论】:

您是否以某种方式解决了这个问题? 我没有。我最终从根本上彻底改变了整个事情,并且永远不需要打这个电话。不过,我从来没有搞清楚为什么上面的电话会发生这种情况。 【参考方案1】:

我找到了这个 rdar:http://www.openradar.me/26280932,上面写着:

在 viewDidLoad 之后但在 viewDidAppear 之前在 UICollectionView 上调用 insertItemsAtIndexPaths: 将导致 -[UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:] 中的断言失败。在同一场景中调用 reloadData 不会生成断言。

因此您可以在viewDidAppear 之前检查您是否正在拨打电话,并在视图出现之前进行调整/等待。

【讨论】:

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

UICollectionView 上的断言失败

UICollectionView + iOS 7 / Xcode 5 = 断言失败

带有 endItemAnimations 的 UICollectionView 中的断言失败

createPreparedCellForItemAtIndexPath 中的 UICollectionView 断言失败

UICollectionView _createPreparedCellForItem 中的断言失败

从 UICollectionView 中删除最后一项时出现断言失败