Apple に従って、App Delegate でコア データ スタックを作成し、managedObjectContext を最初のコントローラーに渡し、そこから 2 番目のコントローラーに渡します。
バックグラウンド スレッドで作業をしようとしていて、PrivateConcurrency 型を使用したいのですが、親が Main または Private でなければならないというエラーが表示されます。
アプリデリゲートでコンテキストを作成します
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
次に、それを最初のコントローラーに渡します
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
Paperwoven_LoadingViewController *firstController = (Paperwoven_LoadingViewController *)navigationController.topViewController;
[firstController setManagedObjectContext:[self managedObjectContext]];
NSLog(@"concurrency type is %@", [self managedObjectContext]);
NSLog(@"concurrency type is %u",firstController.managedObjectContext.concurrencyType);
セルフから同時実行タイプをログアウトすると、メインである 2 が得られることがわかります。しかし、最初のコントローラーに送信したばかりのコンテキストを確認すると、0 が返されます。正しく渡されないのはなぜですか?
編集
さらに、経由で managedObjectContext を取得AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]
でき、同時実行タイプが MAIN であることを確認できますが、次の行self.managedObjectContext = appDelegate.managedObjectContext
で self.managedObjectContext の同時実行タイプを確認すると、それは 0 です。App デリゲートからコントローラーに割り当てると、同時実行タイプが失われるようです.