1

NSFetchedResultsControllerを使用してUITableViewのCoreDataから10000レコードをフェッチし、できるだけ速くしようとしています(リクエストには並べ替え記述子があるため、この量のデータをフェッチするのに時間がかかります)。

最初のメインのNSFetchedResultsController(テーブルのデリゲートメソッドで使用)を使用してCoreDataから100レコードをフェッチしようとしています。これは、別のキューでauxiliarFRCのすべての10000レコードに対して別のフェッチを開始したときにテーブルに表示されます。AuxFRCでのフェッチが終了した後、メインFRCにAuxFRCを割り当てて、すべてのレコードが転送されるようにし、テーブルをリロードします。

私の問題は、performFetchをディスパッチしても、AuxFRCがフェッチを終了するまで、UITableViewが最初にロードされた行でスタックし、これが発生する理由がわかりません。この方法が間違っている場合、10000レコードをフェッチするために他の方法を使用できます。データが変更された場合でも最新の状態を維持しますか?

4

2 に答える 2

1

問題は NSManagedObjectContext だったと思います-これはスレッドセーフではなく、両方のフェッチに同じものを使用しました。元のコピーを作成し、2 番目のコンテキストで AuxFRC を変更しました。これですべて解決しました。

于 2013-02-18T14:52:00.980 に答える
0

その秘訣は、FRCのキャッシュ メカニズムを使用し、非同期フェッチをディスプレイ スレッドと連携させることです。

すべてがこの回答に要約されています。

于 2013-02-15T15:32:16.320 に答える