在应用程序启动时执行NSFetchRequest

时间:2011-08-20 12:13:31

标签: objective-c core-data

在另一个问题(Accessing an NSApplications delegate in another class?)中,我询问了调用Application的委托,因为我需要它的managedObjectContext来获取请求。但是,当我尝试在应用程序启动时让所有值都显示在NSTableView中时,我遇到了问题。我的NSTableViewDataSource DataController在我的应用程序委托调用它的applicationWillFinishStartup或任何其他初始化managedObjectContext的方法之前调用它的init-method。我究竟做错了什么?如何用现有对象填充NSTableView?

1 个答案:

答案 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”获取在线提供的许多教程。