首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将私有队列中的上下文设置为主队列中另一个上下文的子上下文

无法将私有队列中的上下文设置为主队列中另一个上下文的子上下文
EN

Stack Overflow用户
提问于 2015-09-27 09:37:16
回答 1查看 97关注 0票数 1

据我所知,可以在私有队列中创建NSManagedObjectContext,并将其父上下文设置为属于主线程的另一个NSManagedObjectContext .难到不是么?

我想这么做:

代码语言:javascript
复制
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中):

代码语言:javascript
复制
NSManagedObjectContext *mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
mainContext.persistentStoreCoordinator = self.managedObjectContext.persistentStoreCoordinator;
NSManagedObjectContext *privateContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];

privateContext.parentContext = mainContext;

我没有错误..。为什么会发生这种事?AppDelegate中提供的默认上下文有哪些不能作为父上下文工作?

编辑2:我试图设置为父上下文的AppDelegate中的上下文是通过使用默认情况下在AppDelegate中提供的方法初始化的

代码语言:javascript
复制
- (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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-27 10:23:15

在您的情况下,很难检测到什么会抛出异常--信息太少。

乍一看,一切似乎都很好,但是--请注意按照以下顺序设置您的父/子上下文:

  1. 创建根上下文。
  2. 设置它的persistentStoreCoordinator
  3. 创建子上下文
  4. 将其parentContext设置为根上下文
  5. 继续用3-4设置父/子层次结构。

在您的情况下,可能会出现以下例外情况:

  1. mainContextnil
  2. mainContextpersistentStoreCoordinatornil

无论如何,最快的解决方案将是由CoreData触发的日志异常。您可以使用NSSetUncaughtExceptionHandler

编辑1:

为了保持一致,尝试在您的初始化方法中使用NSManagedObjectContext *mainContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];,而不是AppDelegate,而不是alloc/init,但这很可能不是问题的解决办法。再次,阅读控制台中的异常消息-这将给出一个确切的想法,什么是错误的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32806489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档