Xcode 6.1为使用Core Data的基于文档的应用程序提供了全新的模板。现在没有必要继承NSWindowController,因为在10.10中,NSViewController具有更多的功能,并作为默认视图管理器包含在模板中。默认情况下甚至还有AppDelegate,这很棒。
但我陷入了非常愚蠢的境地。我正在使用核心数据。在app加载时我无法获得currentDocument!我是认真的!在app完成启动之前,所有MVC堆栈都被调用。我有一些需要根据具有NSPersinstentDocument实例的Core Data项绘制的对象。但是当调用ViewController的viewDidLoad时,无法获取该实例。无法获取当前创建/打开的文档。
我该怎么办?这是一个错误,或者我真的必须跳过viewDidLoad中的代码并创建一些方法,如loadUIStuffNow,并从我的App Delegate的applicationDidFinishLaunching中调用它?
答案 0 :(得分:2)
我是通过NSViewController的representObject属性完成的。 我在我的NSPersistentDocument子类的makeWindowControllers()中添加了一个简单的行
windowController.contentViewController?.representedObject = self
将我的所有代码从viewDidLoad移动到representObject属性的didSet观察者。并使用representObject作为MyDocument来访问我需要的所有数据。非常简单!