でそれらの一つは、そうのような親/子managedObjectContextsを使用しているCoreDataは、同時実行CoreDataで複数のコンテキスト
で並行処理を扱ういくつかの方法があります我々はchildCoにperformBlockを使用する必要がありますので
let mainContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
let childContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
childContext.persistentStoreCoordinator = mainContext.persistentStoreCoordinator
:子コンテキストが同じpersistentStoreCoordinatorそうように使用しますntext以降では、mainContextにフェッチなどを保存または実行すると、これら2つの方法の違いは何ですか?
Iは、好ましい方法である(私は試み、それがなかった)メインスレッド上で前者の方法と後者ことFlorian Kugler's blogで読み取ります。しかし、私が見たサイトはすべて、元の親/子のコンテキストを好むようです。
するRayWenderLichのCoreDataブック(参照の章10)に、物事はさらに混乱させるために、彼らは理由を説明せずにアプローチの両方を使用しました。
ブロックメインスレッドはMainQueue(mainContext)上で行わなければならないI/O動作である事。したがって、バッチ更新は、引き続きi/oと同じ効果を持ちます。また、非同期フェッチ要求の場合、PersistantStoreCoordinatorは1つであるため、CRUDが終了するまでロックされ、UIはまだブロックされます。私が間違っている? – Mehrdadmaskull
あなたは正しいです。しかし、データの同期私はdispatch_async()ブロック内でそれを呼び出すと、それはちょうどメインのMOCのセーブコールだったので、問題になりたい。他の場所では、私は重い操作をしていませんでした。したがって、3レベルのMOCを維持する代わりに、それは私にとって価値があります。 – kaushal
新しいレコードを作成するために、私は一時MOCを使用しています。これは、後でメインMOCに保存されます。3レベルの親子MOCはあなたのメインスレッドをブロックしませんが、バッチ更新や操作の作成には時間がかかりますが、それぞれのアプローチには散文と円錐があります。 – kaushal