我在AppDelegate类中创建了一个MOC。我的RootView中有一个MOC属性,它由AppDelegate设置,类似于:
rootView.managedObjectContext = self.managedObjectContext;
这个rootView在某个时候创建了一个ModalView,并以相同的方式设置了MOC属性。
一切正常。我可以创建新的托管对象,视图可以访问它们并删除它们。
直到我创建一个[self.managedObjectContext save:&error]
(当应用程序进入后台时在AppDelegate类中)。
在此之后,如果我在rootView中创建一个新的托管对象,我无法通过模态视图删除这个新对象,例如:[self.managedObjectContext deleteObject:managedObject]
该应用程序崩溃。有时我在控制台中有一条错误消息:NSManagedObjectContext无法删除其他上下文中的对象。
所以看来,在保存后,MOC会以某种方式发生变化。
那里发生了什么,我错过了什么。
我正在使用iOS 4.1。
感谢和欢呼,
本
答案 0 :(得分:0)
没有代码就说不出多少,但我可以根据你的描述做出疯狂猜测。
如果你在app委托中有managedObjectContext
属性的自定义getter方法,如果它是nil则创建上下文,你可能已经搞砸了,导致访问者每次都生成一个新的上下文。
例如,Xcode模板访问器如下所示:
- (NSManagedObjectContext *) managedObjectContext {
if (managedObjectContext != nil) {
return managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}
如果你做了类似的事情,但遗漏了对现有上下文的测试,那么每次调用self.managedObjectContext
时都会得到一个新的上下文。
答案 1 :(得分:0)
好的,所以这真的很奇怪:两天前我因为MOC问题而退出了该项目。昨天晚上我再次开始研究它。我绝对没有改变代码上的任何内容,只是想重现错误来调试它。发生了什么?错误没有再出现。所以似乎重新启动计算机“修复”了这个问题。从那时起,即使经过数小时的工作和测试,错误也从未发生过。
无论如何,非常感谢你的帮助。
再见,
本