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

Posted

技术标签:

【中文标题】Xcode 6.1 中新的基于文档的 OS X 应用程序模板【英文标题】:New Document-based OS X app template in Xcode 6.1 【发布时间】:2014-10-19 12:53:47 【问题描述】:

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

但我陷入了非常愚蠢的境地。我正在使用核心数据。而且我在应用加载时无法获取 currentDocument!我是认真的!在应用程序完成启动之前调用所有 MVC 堆栈。我有一些需要基于具有 NSPersinstentDocument 实例的核心数据项绘制的对象。但是当 ViewController 的 viewDidLoad 被调用时,没有办法得到那个实例。无法获取当前创建/打开的文档。

    NSDocumentController.sharedDocumentController().currentDocument 为零。 self.view.window.windowsController.currentDocument 为零。 NSApplication.sharedApplication().windows[0].windowsController.currentDocument 为零。

我该怎么办?这是一个错误,或者我真的必须跳过 viewDidLoad 中的代码并创建一些类似 loadUIStuffNow 的方法并从我的 App Delegate 的 applicationDidFinishLaunching 调用它?

【问题讨论】:

【参考方案1】:

我通过 NSViewController 的代表对象属性做到了这一点。 我在我的 NSPersistentDocument 子类的 makeWindowControllers() 中添加了一个简单的行

windowController.contentViewController?.representedObject = self

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

【讨论】:

以上是关于Xcode 6.1 中新的基于文档的 OS X 应用程序模板的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 5 文档模板 Apps OS X:App 生命周期在哪里

Mac OS X 服务器 Xcode 机器人问题

在 OS X 10.10 (Yosemite Beta) 中,如何使用 iOS 6.1 模拟器进行测试?

使用 xCode 7.3 添加 Worklight 6.1 以观看 OS 2.1 的问题

基于文档的 MacOs 应用程序的 SwiftUI 窗口大小

Xcode 5 Cocoa 应用程序无法在 OS X 10.6 上加载 Nib