【发布时间】:2013-03-01 01:14:56
【问题描述】:
根据 Apple,我在 App Delegate 中创建核心数据堆栈,然后将 managedObjectContext 传递给我的第一个控制器,然后从那里传递给第二个控制器,依此类推。
我正在尝试在后台线程中做一些工作并想使用 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);
我可以看到,当我从 self 注销并发类型时,我得到 2,即 Main。但是当我检查我刚刚发送到第一个控制器的上下文时,我得到 0。为什么它没有正确传递?
编辑
此外,我可以通过AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate] 获取 managedObjectContext,我可以看到并发类型是 MAIN,但如果在下一行我做 self.managedObjectContext = appDelegate.managedObjectContext,然后检查 self.managedObjectContext 上的并发类型,它是 0。看起来像分配它从 App 委托到控制器丢失并发类型。
【问题讨论】:
标签: ios objective-c xcode core-data