Core Data がスレッド セーフでないことは概ね理解していますが、特定の状況について質問があります。メイン スレッドのコンテキストでオブジェクトを作成するとしますが、重い計算を実行したいとします。そのため、オブジェクトを別のスレッドに送信します。これはすでに悪いように聞こえますが、何らかの方法でそのオブジェクトをコピーする必要がありますか? 他のスレッドのコンテキストでオブジェクトを保存すると、そのコンテキストから有効なオブジェクトを取得できないようです (最初にストアに保存する必要がありますか? これは、ハード ディスクの悪用のようです)。現在マジカルレコードを使っていて、流れはこんな感じです。
mSaveData = [XXX MR_createEntity];
//Set various properties
//In another method
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
mSaveData.questionId = xxx;
//Set more properties
[[mSaveData managedObjectContext] MR_saveToPersistentStoreAndWait];
}
最初は使うべきだと思ったのです[mSaveData MR_inThreadContext]
が、このメソッドは戻りますnil
(オブジェクトがまだ保存されていないためでしょうか?)。私の現在のアプローチは、スレッド間でコンテキストを共有しているため (保存操作のためだけに)、少し不快です。好ましい別のアプローチはありますか?プロパティを設定して保存するには、単にメイン スレッドにディスパッチする必要がありますか?