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

11
我在我的应用程序中遇到了这个错误:

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

它发生在我的 -controllerDidChangeContent: 方法中,出错行为:

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

有人知道是什么原因引起的吗?我的代码基本上是根据https://gist.github.com/4440c1cba83318e276bb,但我还是不知道问题出在哪里。

谢谢!

3个回答

9

这些断言会被作为异常抛出。将批量更新内容放在try/catch块中,并输出异常描述信息。这会告诉你关于调用的错误信息。

换句话说:

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

调试的好选择。 - kelin

1

我打赌这是因为你的

-controllerDidChangeContent

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

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


它肯定是在主线程上被调用的,所以这不是问题。 - user319436

1
问题在于视图消失时没有将FRC委托设置为nil。

干杯!就是这样!在viewDidDisappear中将FRC设置为nil,并在viewWillAppear中重新分配给self解决了我的类似问题。 - So Over It
FRC 代表什么? :-| - Kalle
@Kalle:FRC = 获取结果控制器 - AlexR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接