最近 Core Data Programming Guide を読みましたが、Apple はそうするように勧めています
バックグラウンド スレッドで 1 つの管理対象オブジェクト コンテキストをフェッチし、フェッチしたオブジェクトのオブジェクト ID を別のスレッドに渡します。2 番目のスレッド (通常はアプリケーションのメイン スレッドで、結果を表示できるようにするため) では、2 番目のコンテキストを使用して、それらのオブジェクト ID を持つオブジェクトをフォールトします (objectWithID: を使用してオブジェクトをインスタンス化します)。(この手法は、SQLite ストアを使用している場合にのみ役立ちます。 > バイナリおよび XML ストアからのデータは、開くとすぐにメモリに読み込まれるためです。)
私の理解では、バックグラウンド コンテキストでのフェッチは管理対象オブジェクトをメイン スレッド コンテキストに登録しないため、objectWithID から返された管理対象オブジェクトはおそらくエラーです。メイン スレッドで使用すると、SQLite ストアへの新しいラウンドのトリップがトリガーされます。そのため、UI がブロックされている可能性があります。
何か見逃しましたか?メインスレッドの I/O オーバーヘッドを回避する方法はありますか?