据我所知,可以在私有队列中创建NSManagedObjectContext,并将其父上下文设置为属于主线程的另一个NSManagedObjectContext .难到不是么?
我想这么做:
NSManagedObjectContext *privateContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *mainContext = appDelegate.managedObjectContext;
[privateContext setParentContext:mainContext]; 但是当我运行这段代码时,我在[privateContext setParentContext:mainContext]上得到了一个[privateContext setParentContext:mainContext]错误。
我从mainContext检索到的AppDelegate是在主线程中初始化的,这个代码片段也在主线程中被调用。我能做错什么或者错过什么?
谢谢
编辑:,如果我这样做的话(在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;
}发布于 2015-09-27 10:23:15
在您的情况下,很难检测到什么会抛出异常--信息太少。
乍一看,一切似乎都很好,但是--请注意按照以下顺序设置您的父/子上下文:
persistentStoreCoordinatorparentContext设置为根上下文在您的情况下,可能会出现以下例外情况:
mainContext是nilmainContext的persistentStoreCoordinator是nil无论如何,最快的解决方案将是由CoreData触发的日志异常。您可以使用NSSetUncaughtExceptionHandler
编辑1:
为了保持一致,尝试在您的初始化方法中使用NSManagedObjectContext *mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];,而不是AppDelegate,而不是alloc/init,但这很可能不是问题的解决办法。再次,阅读控制台中的异常消息-这将给出一个确切的想法,什么是错误的。
https://stackoverflow.com/questions/32806489
复制相似问题