Xcode 6.1中基于新文档的OS X应用程序模板

时间:2014-10-19 12:53:47

标签: cocoa core-data swift xcode6 osx-yosemite

Xcode 6.1为使用Core Data的基于文档的应用程序提供了全新的模板。现在没有必要继承NSWindowController,因为在10.10中,NSViewController具有更多的功能,并作为默认视图管理器包含在模板中。默认情况下甚至还有AppDelegate,这很棒。

但我陷入了非常愚蠢的境地。我正在使用核心数据。在app加载时我无法获得currentDocument!我是认真的!在app完成启动之前,所有MVC堆栈都被调用。我有一些需要根据具有NSPersinstentDocument实例的Core Data项绘制的对象。但是当调用ViewController的viewDidLoad时,无法获取该实例。无法获取当前创建/打开的文档。

  1. NSDocumentController.sharedDocumentController()。currentDocument为nil。
  2. self.view.window.windowsController.currentDocument为nil。
  3. NSApplication.sharedApplication()。windows [0] .windowsController.currentDocument为nil。
  4. 我该怎么办?这是一个错误,或者我真的必须跳过viewDidLoad中的代码并创建一些方法,如loadUIStuffNow,并从我的App Delegate的applicationDidFinishLaunching中调用它?

1 个答案:

答案 0 :(得分:2)

我是通过NSViewController的representObject属性完成的。 我在我的NSPersistentDocument子类的makeWindowControllers()中添加了一个简单的行

windowController.contentViewController?.representedObject = self

将我的所有代码从viewDidLoad移动到representObject属性的didSet观察者。并使用representObject作为MyDocument来访问我需要的所有数据。非常简单!