我在串行GCD队列中使用辅助managedobjectcontext,使用相同的持久性存储协调器(和模型)。我遇到的问题是辅助managedobjectmodel似乎是空的 - 所有提取请求都不返回任何内容。我正在使用sqlite商店。我尝试在主线程上做同样的事情但无济于事。
代码非常简单。 CoreDataUtility是一个单例,singleton的manageObjectContext成员是另一个托管对象上下文。
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:[CoreDataUtility instance].managedObjectContext.persistentStoreCoordinator];
获取请求(我已尝试过几次)与妈妈除外。
辅助妈妈在调试器中看起来很好 - 在初级妈妈中你期望的属性实际上是相同的。
答案 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];