アプリに次の Core Data セットアップがあります。
Persistent Store Coordinator
^ Background MOC (NSPrivateQueueConcurrencyType)
^ Main Queue MOC (NSMainQueueConcurrencyType)
初期化コードは次のとおりです。
_backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[_backgroundContext setPersistentStoreCoordinator:self.coordinator];
_mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_mainContext setParentContext:_backgroundContext];
大量のデータをインポートするためにバックグラウンド MOC を使用しています。また、これを使用してバックグラウンドで複雑なフェッチ リクエストを実行し、オブジェクト ID をメイン キューに渡して、これらの ID を使用してオブジェクトをフェッチします。
これは非常にうまく機能します。ただし、バックグラウンド MOC で行われた変更をメイン キュー MOC に通知する方法がわかりません。メイン キューの MOC でフェッチ要求を実行すると、変更が取得されることはわかっていますが、それは私が望んでいることではありません。
NSManagedObjectContextObjectsDidChangeNotification
バックグラウンド MOC によってポストされた通知を使用しmergeChangesFromContextDidSaveNotification:
て、メイン キュー MOC を呼び出しても問題ありませんか? これNSManagedObjectContextObjectsDidChangeNotification
により、メイン キューの MOC の通知が発生します。ビューコントローラーでこの通知をリッスンし、変更を調べて、userInfo
それに応じてデータを再表示します。2 つの MOC が接続された 1 つの永続ストア コーディネーターがある場合、通常はこの方法で行うと思います。しかし、子/親のコンテキストがある場合、それが正しい方法であるかどうかはわかりません。