我在一个串行GCD队列中使用一个二级managedobjectcontext,使用相同的持久化存储协调器(和模型)。我遇到的问题是,辅助的managedobjectmodel似乎是空的--所有的fetch请求都不返回任何内容。我使用的是sqlite商店。我试着在主线程上做同样的事情,但没有效果。
代码非常简单。CoreDataUtility是一个单例,该单例的manageObjectContext成员是另一个托管对象上下文。
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:[CoreDataUtility instance].managedObjectContext.persistentStoreCoordinator];除了mom之外,fetch请求(我已经尝试过几次)都是相同的。
辅助mom在调试器中看起来很好--您期望在主mom中相同的属性实际上是相同的。
发布于 2011-09-14 12:37:06
问题出在我加载模型的方式上。我没有解释为什么这个方法有效,但是它确实解决了这个问题。也许其他人可以解释清楚。
这段代码:
managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];替换为以下代码:
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"mymodel" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; 发布于 2011-09-13 08:15:28
如果从[CoreDataUtility instance].managedObjectContext.persistentStoreCoordinator返回的持久存储协调器是正确的(您检查过了吗?),那么这部分至少应该是正确的。
我在自己的应用程序中使用了类似的方法,用于创建背景上下文的代码与创建主上下文的代码完全相同。我预计问题可能出在其他地方。
您是否尝试过在主上下文中访问对象,然后使用以下命令将该对象出错到其他上下文中:
NSManagedObject *backgroundObject = [backgroundContext existingObjectWithID:object error:&error];并查看对象是否仍然有效?
https://stackoverflow.com/questions/7395364
复制相似问题