在另一个问题(Accessing an NSApplications delegate in another class?)中,我询问了调用Application的委托,因为我需要它的managedObjectContext来获取请求。但是,当我尝试在应用程序启动时让所有值都显示在NSTableView中时,我遇到了问题。我的NSTableViewDataSource DataController在我的应用程序委托调用它的applicationWillFinishStartup或任何其他初始化managedObjectContext的方法之前调用它的init-method。我究竟做错了什么?如何用现有对象填充NSTableView?
答案 0 :(得分:1)
您应该仅通过其获取器访问managedObjectContext
,即使是DataController
,也可以[appDelegate managedObjectContext]
或appDelegate.managedObjectContext
。
您的managedObjectContext
方法应自动设置托管对象上下文;你不应该在你的applicationDidFinishLaunching
等中写一个明确的moc设置例程。标准的核心数据模板是这样编写的。
现在,要实现这一点,需要从DataController
的角度正确设置应用程序委托。但是,在设置所有init
之前调用IBOutlet
,因此在nib内执行对象的设置操作是错误的。相反,使用awakeFromNib
来做这些事情。在awakeFromNib
等全部设置完成后,IBOutlet
被发送到每个对象。
那就是说,写自己的DataController
完全是浪费时间。只需在nib文件中实例化标准NSArrayController
,然后通过绑定在Core Data模式下使用它。您完全没有必要自己编写获取请求。研究Apple自己的CoreData示例代码,然后google“Binding CoreData Tutorial”获取在线提供的许多教程。