5

コアデータを使用して、フェッチされた結果コントローラーでこのUICollectionViewセットアップを行いました。UIImagePickerControllerにアイテムを追加するために使用しUICollectionViewます。デバイスに保存されている写真の 1 つをタップすると、管理対象オブジェクト コンテキストに追加され、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のメソッドで使用されるブロックに新しいアイテムを格納するために使用されるマネージド オブジェクトを作成していましたassetForURL: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 に答える