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

标签 cocoa core-data swift xcode6 osx-yosemite

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

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

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

我该怎么办?这是一个错误,或者我真的必须跳过 viewDidLoad 中的代码并创建一些类似 loadUIStuffNow 的方法并从我的应用程序委托(delegate)的 applicationDidFinishLaunching 中调用它?

最佳答案

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

windowController.contentViewController?.representedObject = self

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

关于cocoa - Xcode 6.1 中新的基于文档的 OS X 应用程序模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26450735/

相关文章:

objective-c - 为什么 Apple 以前使用 typedef 引用(指针)类型但现在不使用?

objective-c - 调整大小和布局 : How to implement this design?

objective-c - 解密Cocoa中的RSA公钥

ios - 核心数据同步创建和获取

ios - 如何使用 Swift iOS 将字符串中的每个单词大写

objective-c - 如何在 cocoa 应用程序中对单选按钮(来自 Storyboard)进行分组?

database - 核心数据与数据库的根本区别?

ios - 排序顺序与显示排序顺序

ios - 更新到 swift 4 后 UNUserNotification 不起作用

swift - 在后台收到通知时 didReceiveRemoteNotification 不起作用