【发布时间】:2015-09-27 09:37:16
【问题描述】:
据我了解,可以在私有队列中创建一个NSManagedObjectContext,并将其父上下文设置为另一个属于主线程的NSManagedObjectContext...不是吗?
我正在尝试这样做:
NSManagedObjectContext *privateContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *mainContext = appDelegate.managedObjectContext;
[privateContext setParentContext:mainContext];
但是当我运行此代码时,我在[privateContext setParentContext:mainContext] 处收到SIGABRT 错误。
我从AppDelegate检索到的mainContext在主线程中初始化,这段代码sn-p也在主线程中被调用。我会做错什么或遗漏什么?
谢谢
编辑:如果我改为这样做(AppDelegate):
NSManagedObjectContext *mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
mainContext.persistentStoreCoordinator = self.managedObjectContext.persistentStoreCoordinator;
NSManagedObjectContext *privateContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
privateContext.parentContext = mainContext;
我没有收到任何错误...为什么会发生这种情况? AppDelegate 中提供的默认上下文有什么不能作为父上下文?
编辑 2: 我试图设置为父上下文的 AppDelegate 中的上下文是使用 AppDelegate 中默认提供的方法初始化的:
- (NSManagedObjectContext *)managedObjectContext
{
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (!coordinator) {
return nil;
}
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
return _managedObjectContext;
}
【问题讨论】:
标签: ios core-data concurrency nsmanagedobjectcontext