【问题标题】:UICollectionView: Assertion failure in -[UICollectionView _endItemAnimations]UICollectionView:-[UICollectionView _endItemAnimations] 中的断言失败
【发布时间】:2012-12-07 19:46:46
【问题描述】:

我的应用程序出现此错误:

*** -[UICollectionView _endItemAnimations] 中的断言失败,/SourceCache/UIKit/UIKit-2372/UICollectionView.m:2801

这发生在我的-controllerDidChangeContent: 方法中的这一行:

[self.collectionView performBatchUpdates:^{...}];

有人知道这是什么原因吗?我的代码与https://gist.github.com/4440c1cba83318e276bb 密切相关,我不知所措。

谢谢!

【问题讨论】:

    标签: ios ipad ios6 uicollectionview assertions


    【解决方案1】:

    这些类型的断言作为异常抛出。将批量更新包装在 try/catch 中并转储异常描述。它会准确地告诉你它不喜欢你的电话的地方。

    换句话说:

        @try
        {
            [self.collectionView performBatchUpdates:^{...}];
        }
        @catch (NSException *except)
        {
            NSLog(@"DEBUG: failure to batch update.  %@", except.description);
        }
    

    【讨论】:

    • 调试的好选择。
    【解决方案2】:

    我敢打赌这是因为你的

    -controllerDidChangeContent
    

    在后台线程中被多次调用,而performBatchUpdates在另一个线程调用它时仍在工作,因此导致不正确的行为。

    解决方案 - 尝试将其包装在 @synchronized 中或使用 NSLocks

    【讨论】:

    • 它肯定是在主线程上调用的,所以这不是问题
    【解决方案3】:

    问题在于没有在视图 didDisappear 上将 FRC 委托设置为 nil。

    【讨论】:

    • 干杯!就是这样!在 viewDidDisappear 上将 FRC 设置为 nil 并重新分配给自己的 viewWillAppear 解决了我的类似问题。
    • FRC 代表什么? :-|
    • @Kalle: FRC = Fetched Results Controller
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多