2011-08-20 54 views
0

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

回答

1

只能通过其吸气器访问managedObjectContext,即使是从DataController,如[appDelegate managedObjectContext]appDelegate.managedObjectContext也是如此。

您的managedObjectContext方法应自动设置托管对象上下文;你不应该在你的applicationDidFinishLaunching等中写明确的moc设置例程。标准的核心数据模板就是这样编写的。

现在,为了这个工作,应用代理需要从DataController的角度来正确设置。但是,在设置所有IBOutlet之前调用init,所以这是在笔尖内执行对象设置操作的错误位置。相反,使用awakeFromNib来做这些事情。 awakeFromNib等等全部设置后发送给每个对象。

这就是说,写自己的DataController是完全浪费时间。只需在nib文件中实例化标准NSArrayController,并通过绑定在核心数据模式中使用它。您绝对不需要自己编写获取请求。研究苹果公司自己的CoreData示例代码,然后谷歌“绑定CoreData教程”可以在线获得许多教程。

+0

我已经将我的项目作为zip文件上传到了Dropbox。我希望它可以帮助:http://dl.dropbox.com/u/22139493/Shop%20Helper.zip在执行此操作之前,您可能希望在db中创建一些条目,因为我删除了一些行,每次添加一个新条目应用程序启动 –

+0

好的,我会相应地重写我的答案。 – Yuji

+0

谢谢。但是,我的应用程序旨在成为核心数据的第一步,而不是真正具有特定用途。无论如何,谢谢你的提示 –

相关问题