带有 endItemAnimations 的 UICollectionView 中的断言失败
Posted
技术标签:
【中文标题】带有 endItemAnimations 的 UICollectionView 中的断言失败【英文标题】:Assertion failure in UICollectionView with endItemAnimations 【发布时间】:2015-03-06 09:54:19 【问题描述】:我在UICollectionView
中显示项目列表,当调用回调函数时,我正在更新项目数组并重绘集合,但应用程序每次都会因下一条消息而崩溃:
*** -[UICollectionView _endItemAnimations] 中的断言失败,/SourceCache/UIKit/UIKit-3318.16.25/UICollectionView.m:3765
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试将项目 1 插入第 0 节,但更新后第 0 节中只有 1 项”
我使用的代码是:
items = [databaseManager getNewItems];
[self.collectionView performBatchUpdates:^
[self.collectionView reloadItemsAtIndexPaths:[self.collectionView indexPathsForVisibleItems]];
[self.collectionView reloadData];
completion:^(BOOL finished) ];
【问题讨论】:
【参考方案1】:我通过用这个替换起始代码解决了这个问题:
int numberOfOldItems = (int)items.count;
items = [databaseManager getNewItems];
[self.collectionView performBatchUpdates:^
NSMutableArray *indexpatharray = [[NSMutableArray alloc]init];
for (int i = 0; i<numberOfOldItems; i++)
[indexpatharray addObject:[NSIndexPath indexPathForRow:i inSection:0]];
[self.collectionView deleteItemsAtIndexPaths:indexpatharray];
[indexpatharray removeAllObjects];
for (int i = 0; i<items.count; i++)
[indexpatharray addObject:[NSIndexPath indexPathForRow:i inSection:0]];
[self.collectionView insertItemsAtIndexPaths:indexpatharray];
completion:nil];
代码首先从集合视图中删除所有项目,然后添加新项目。
【讨论】:
以上是关于带有 endItemAnimations 的 UICollectionView 中的断言失败的主要内容,如果未能解决你的问题,请参考以下文章