带有 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 中的断言失败的主要内容,如果未能解决你的问题,请参考以下文章

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

PHP 是不是带有 UI 组件? [关闭]

带有圆形中心按钮的页脚 UI

带有backbonejs的剑道UI

带有样式组件的材质 ui 按钮

带有旋转 UI 元素的自动布局