5

我已经UICollectionView使用核心数据使用获取的结果控制器进行了设置。我UIImagePickerController用来将项目添加到UICollectionView. 现在,当我点击存储在设备上的一张照片时,它将被添加到我的托管对象上下文中,并将插入到UICollectionView.

现在,当我快速添加多个项目时,应用程序崩溃并出现以下错误:

2012-10-07 13:17:46.770 PhotoLibrary[2444:907] *** Assertion failure in -[UICollectionView _endItemAnimations], /SourceCache/UIKit/UIKit-2372/UICollectionView.m:2801

似乎它无法处理添加项目,而前一个添加项目的动画尚未结束。当您非常快速地添加它们时,就会发生这种情况,但有些用户会这样做。

有没有一种好方法可以在另一个项目完成时等待并添加项目?用户应该能够“实时”添加它们,所以我不能一次运行所有更改。

4

2 回答 2

2

该错误仅在快速添加几个项目时发生。但真正的问题与动画无关。我正在创建用于将新项目存储在块中的托管对象,用于ALAssetsLibrary'sassetForURL:resultBlock:方法。

花了一段时间才弄清楚这是问题所在,托管对象是在单独的线程中创建的。事实证明,托管对象不能很好地处理。

现在将新项目的创建移到块之外,现在它可以正常工作了。

于 2012-10-25T12:30:48.033 回答
1

如果没有示例代码,我假设- (void)reloadData在将数据插入到UICollectionView. 此方法的文档明确指出您不应在插入/删除引起的动画中间调用此方法,因为插入/删除将自动调用动画代码。

其他一些值得注意的方法是- (void)insertItemsAtIndexPath:(NSArray *)indexPaths- (void)performBatchUpdates:(void (^)(void))updates completion:(void (^)(BOOL finished))completion。我没有使用过批处理方法,但是我使用过多次插入方法并且效果很好。

于 2012-10-24T20:05:37.307 回答