1

我真的很想弄清楚我的托管对象上下文消失在哪里。

我最初是在我的应用程序委托中实例化它,然后将它传递给 NSWindowController 中的保留属性,如下所示:

self.TPWC = [[TestPanelWindowController alloc] initWithWindowNibName:@"TestPanel"];
self.TPWC.managedObjectContext = self.managedObjectContext;
self.TPWC.persistentStoreCoordinator = self.persistentStoreCoordinator;
[TPWC.window makeKeyAndOrderFront:nil];

然后我有一个按钮,应该实例化一个NSManagedObject并将其插入到托管对象上下文中,如下所示:

 NSManagedObject *newInstanceOfSomeEntity =

 [NSEntityDescription insertNewObjectForEntityForName:@"SomeEntity" 
 inManagedObjectContext:self.managedObjectContext];

至此,self.managedObjectContext不知何故变成了nil。

我已经在 windowDidLoad 中插入了一个断点,我可以确认此时我们确实有一个有效的 an 实例NSManagedObjectContext,但它在 viewDidLoad 和尝试插入托管对象之间以某种方式变为 nil 。

我尝试创建一个自定义初始化程序来设置,NSManagedObjectContext但它仍然为零。

Core Data 对我来说很新,我很难理解出了什么问题。

4

1 回答 1

2

这不是您为什么看到您的上下文消失的直接答案,但它仍然可以解决您的问题:

从架构的角度来看,您真的不应该在对象之间传递托管对象上下文,尤其是 UI 对象。

相反,您应该有一个全局单例类来实例化托管对象上下文(可能还有协调器和持久存储),然后通过公共属性提供对它的访问。然后,从您的窗口控制器中,您只需从单例对象访问它。

(如果您使用多线程,请注意从不同线程访问和使用相同的上下文。)

于 2012-11-07T23:02:58.940 回答