Cocoa如果没有托管对象上下文,则无法执行操作

时间:2011-08-09 14:10:50

标签: objective-c cocoa core-data cocoa-bindings

我有一个基于Mac窗口的应用程序,使用CoreData和Cocoa绑定将CoreData实体绑定到NSArrayController,以便在NSCollectionView中显示。

我的控制器(设置为视图文件所有者的视图)上有一个名为managedObjectConext的属性。在awakeFromNib方法中,我尝试将managedObjectContext(MOC)属性设置为:

managedObjectContext = [(MyApplicationAppDelegate *)[[NSApplication sharedApplication] delegate] managedObjectContext];
managedObjectContext = [[NSApp delegate] managedObjectContext];

我还将NSArrayControllers MOC绑定配置为'Files Owner'MOC属性,并将属性绑定配置为我的CoreData实体的绑定。

但是每次我在它即将进行绑定之前运行应用程序时,我都会收到以下错误消息:

Cocoa无法在没有托管对象上下文的情况下执行操作

我已经登录控制台检查MOC是不是nil,我认为它不是因为这是来自MOC对象的NSLog:myMoc = NSManagedObjectContext:0x10052f9c0

我现在感到非常难过,并且感到沮丧的是,应该如此简单的事情占用了我的大部分时间!任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:5)

绑定是在nib中定义的,因此如果nib不知道控制器的managedObjectContext属性,那么绑定也不会。

在界面编辑器中,您需要将数组控制器绑定面板中的managedObjectContext键绑定到特定上下文。

为一个上下文应用程序执行此操作的最简单方法是将app delegate中的managedObjectContext属性标记为IBOutlet,以便它显示在界面编辑器中。然后直接从阵列控制器的面板中绑定它。

老实说,我不知道他们为什么不在Xcode模板本身那样做。你经常这么做。

答案 1 :(得分:3)

我遇到了同样的问题。这修好了它:

移动线条:

managedObjectContext = [(MyApplicationAppDelegate *)[[NSApplication sharedApplication] delegate] managedObjectContext];
managedObjectContext = [[NSApp delegate] managedObjectContext];

awakeFromNib方法到init方法。

答案 2 :(得分:1)

在swift中,将其添加到ArrayController附加到的任何视图控制器中:

    var managedObjectContext:NSManagedObjectContext? = {
            let delegater = NSApplication.sharedApplication().delegate as! AppDelegate
    return delegater.managedObjectContext
}()

答案 3 :(得分:0)

使用Swift 4.x,您可以像这样在ViewController中创建一个变量:

IF(A1>-1,IF(B1>A1,0,COMBIN(A1,B1)),(-1)^(B1)*COMBIN(-A1-1+B1,B1))

然后将其绑定到您的ArrayController: enter image description here