0

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

谢谢和欢呼,

4

2 回答 2

0

好的,这真的很奇怪:两天前,由于 MOC 问题,我退出了该项目的工作。昨天晚上我又开始研究它了。我绝对没有更改代码上的任何内容,只是想重现错误以对其进行调试。发生了什么?错误没有再次出现。因此,似乎重新启动计算机“修复”了问题。从那以后,即使经过数小时的工作和测试,该错误也再也没有发生过。

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

再见,

于 2010-09-15T07:35:04.327 回答
0

Can't tell much without code but I can take a wild guess based on your description.

If you have a custom getter method for the managedObjectContext property in the app delegate that creates the context if it is nil, you might have messed it up causing the accessor to generate a new context each time.

For example, the Xcode template accessors looks like:

- (NSManagedObjectContext *) managedObjectContext {

    if (managedObjectContext != nil) {
        return managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }
    return managedObjectContext;
}

If you did something similar but left out the test for the existing context, you would get a new context each time self.managedObjectContext is called.

于 2010-09-14T12:18:20.583 回答