多个NSManagedObjectContext问题

时间:2011-09-12 23:53:17

标签: ios core-data

我在串行GCD队列中使用辅助managedobjectcontext,使用相同的持久性存储协调器(和模型)。我遇到的问题是辅助managedobjectmodel似乎是空的 - 所有提取请求都不返回任何内容。我正在使用sqlite商店。我尝试在主线程上做同样的事情但无济于事。

代码非常简单。 CoreDataUtility是一个单例,singleton的manageObjectContext成员是另一个托管对象上下文。

    NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
    [managedObjectContext setPersistentStoreCoordinator:[CoreDataUtility instance].managedObjectContext.persistentStoreCoordinator];

获取请求(我已尝试过几次)与妈妈除外。

辅助妈妈在调试器中看起来很好 - 在初级妈妈中你期望的属性实际上是相同的。

2 个答案:

答案 0 :(得分:0)

如果从[CoreDataUtility instance].managedObjectContext.persistentStoreCoordinator返回的持久性商店协调员是正确的(你检查了吗?),那么这部分至少应该没问题。

我在自己的应用程序中使用了类似的方法,我创建背景上下文的代码与主上下文完全相同。我预计问题可能出在其他地方。

您是否尝试在主上下文中访问该对象,然后使用以下命令将该对象置于其他上下文中:

NSManagedObject *backgroundObject = [backgroundContext existingObjectWithID:object error:&error];

看看对象是否仍然有效?

答案 1 :(得分:0)

问题结果与我加载模型的方式有关。我没有解释为什么这有效,但确实解决了这个问题。也许其他人可以解释。

此代码:

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

替换为此代码:

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"mymodel" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];