Ios 无法将专用队列中的上下文设置为主队列中另一上下文的子上下文
据我所知,可以在专用队列中创建一个Ios 无法将专用队列中的上下文设置为主队列中另一上下文的子上下文,ios,core-data,concurrency,nsmanagedobjectcontext,Ios,Core Data,Concurrency,Nsmanagedobjectcontext,据我所知,可以在专用队列中创建一个NSManagedObjectContext,并将其父上下文设置为属于主线程的另一个NSManagedObjectContext。。。不是吗 我正在尝试这样做: NSManagedObjectContext *privateContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; AppDelegate *appDelegat
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
在主线程中初始化,该代码段也在主线程中调用。我会做错什么或错过什么
谢谢
编辑:如果我改为这样做(在AppDelegate
中):
我没有错。。。为什么会发生这种情况?AppDelegate
中提供的默认上下文有哪些不作为父上下文的内容
编辑2:我试图设置为父上下文的AppDelegate
中的上下文是使用AppDelegate
中默认提供的方法初始化的:
NSManagedObjectContext *mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
mainContext.persistentStoreCoordinator = self.managedObjectContext.persistentStoreCoordinator;
NSManagedObjectContext *privateContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
privateContext.parentContext = mainContext;
- (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;
}
在您的案例中很难检测出引发异常的原因-信息太少 乍一看,一切似乎都很好,但是-请按照以下顺序设置您的家长/孩子上下文:
persistentStoreCoordinator
parentContext
设置为根上下文mainContext
是nil
mainContext
的persistentStoreCoordinator
是nil
要保持一致,请尝试使用
NSManagedObjectContext*mainContext=[[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType]在初始化方法中,在AppDelegate
而不是alloc/init
中使用code>,但这很可能不是问题的解决方法。同样,请阅读控制台中的异常消息-这将给出错误的确切信息。很难检测出在您的情况下引发异常的原因-信息太少
乍一看,一切似乎都很好,但是-请按照以下顺序设置您的家长/孩子上下文:
创建根上下文
设置其persistentStoreCoordinator
创建子上下文
将其parentContext
设置为根上下文
继续使用3-4设置父/子层次结构
在您的情况下,由于以下原因可能会出现例外情况:
mainContext
是nil
mainContext
的persistentStoreCoordinator
是nil
无论如何,最快的解决方案是由CoreData引发日志异常。你可以用
编辑1:
要保持一致,请尝试使用NSManagedObjectContext*mainContext=[[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType]在初始化方法中,在AppDelegate
而不是alloc/init
中使用code>,但这很可能不是问题的解决方法。同样,请阅读控制台中的异常消息-这将准确了解出了什么问题。谢谢。我编辑了我的问题,以提供mainContext
的初始化方法,即AppDelegate
中提供的方法,我没有做任何更改mainContext
在我尝试将其设置为父上下文时已经初始化,这可能是因为初始化方法需要任何更改吗?@AppsDev我已编辑了一点答案-再次阅读错误消息plzYou were right,这是我得到的异常消息:父NSManagedObjectContext必须使用NSPrivateQueueConcurrencyType或NSMainQueueConcurrencyType。
。谢谢,谢谢。我编辑了我的问题,以提供mainContext
的初始化方法,即AppDelegate
中提供的方法,我没有做任何更改mainContext
在我尝试将其设置为父上下文时已经初始化,这可能是因为初始化方法需要任何更改吗?@AppsDev我已编辑了一点答案-再次阅读错误消息plzYou were right,这是我得到的异常消息:父NSManagedObjectContext必须使用NSPrivateQueueConcurrencyType或NSMainQueueConcurrencyType。
。谢谢