我有一个基于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
我现在感到非常难过,并且感到沮丧的是,应该如此简单的事情占用了我的大部分时间!任何帮助将不胜感激。
答案 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)