0

次のパターンで複数のスレッドでコアデータを使用することを推奨する多くのブログを読みました。 ここに画像の説明を入力

問題は、アプリの起動時にロードする必要があるレコードが多数ある場合、NSFetchdResultsController を使用して CoreData 内のすべてのレコードを取得する必要があることです。メインスレッド(メインモック)で実行するので、メインスレッドをブロックしますか? 一部のレコードを取得したい場合、Temporary Background MOC を使用して取得できますか? そしてそれを行う方法は?

4

1 に答える 1

0

通常、NSFetchedResultsController のフェッチ要求でバッ​​チ処理を構成します。次に、NSFetchedResultsController でフェッチを実行し、次にフェッチ リクエストを実行すると、基本的にオブジェクト ID のみをフェッチし、データをフェッチしないため、そのリクエストは最小限に抑えられます。後で、結果のオブジェクトがアクセスされると (通常は -tableView:cellForRowAtIndexPath: で)、最初のバッチがフェッチされます。このフェッチにもほとんど時間がかかりません (バッチ サイズを十分に小さく設定した場合)。スクロールしてバッチに含まれていない最初のオブジェクトにアクセスすると、次のバッチが取得されます。このようにして、メイン スレッドで大きなフェッチが実行されることはありません。

このアプローチと選択したパターンには 1 つの問題があります。fetch リクエストが子コンテキストで実行されると、何らかの理由でバッチ処理が機能しません。これは、永続ストア コーディネーターに直接接続されたコンテキストでのみ機能します。

于 2013-07-11T20:11:17.667 に答える