以下のコードを使用して、マルチスレッドで NSManagedObjectContext を管理できます
- (void)mergeChanges:(NSNotification*)notification
{
NSLog(@"[mergeChanges] enter");
// save changes to manageObjectContext on main thread
AppDelegate *theDelegate = [[UIApplication sharedApplication] delegate];
[[theDelegate managedObjectContext] performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:)
withObject:notification
waitUntilDone:YES];
NSLog(@"[mergeChanges] leave");
}
- (NSManagedObjectContext*)startThreadContext
{
AppDelegate *theDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *newMoc = [[NSManagedObjectContext alloc] init];
[newMoc setPersistentStoreCoordinator:[theDelegate persistentStoreCoordinator]];
// Register for context save changes notification
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeChanges:)
name:NSManagedObjectContextDidSaveNotification
object:newMoc];
return newMoc;
}
- (void)stopThreadContext:(NSManagedObjectContext*)context
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:NSManagedObjectContextDidSaveNotification
object:context];
}
スレッドコンテキストの先頭で呼び出すことができます
-(NSManagedObjectContext*)startThreadContext
スレッドで新しい NSManagedObjectContext を使用すると、スレッドが終了したら NSManagedObjectContext を削除できます。新しい NSManagedObjectContext を保存するたびに、メイン スレッドのマネージド オブジェクト コンテキストに変更を保存するよう通知します。