ManagedObjectContext似乎在保存后更改,并且无法由其他一些ViewController更改

时间:2010-09-14 10:49:33

标签: iphone cocoa-touch core-data ios4 nsmanagedobjectcontext

我在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。

感谢和欢呼,

2 个答案:

答案 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问题而退出了该项目。昨天晚上我再次开始研究它。我绝对没有改变代码上的任何内容,只是想重现错误来调试它。发生了什么?错误没有再出现。所以似乎重新启动计算机“修复”了这个问题。从那时起,即使经过数小时的工作和测试,错误也从未发生过。

无论如何,非常感谢你的帮助。

再见,