Xcode 6.1 为使用 Core Data 的基于文档的应用程序提供了全新的模板。现在不需要子类化 NSWindowController,因为在 10.10 中 NSViewController 具有更多功能,并且作为默认 View 管理器包含在模板中。默认情况下甚至还有 AppDelegate,这很棒。
但我陷入了非常愚蠢的境地。我正在使用核心数据。而且我在加载应用程序时无法获取 currentDocument!我是认真的!在应用程序完成启动之前,所有 MVC 堆栈都会被调用。我有一些对象需要根据具有 NSPersinstentDocument 实例的核心数据项进行绘制。但是当 ViewController 的 viewDidLoad 被调用时,没有办法获取该实例。无法获取当前创建/打开的文档。
- NSDocumentController.sharedDocumentController().currentDocument 为零。
- self.view.window.windowsController.currentDocument 为零。
- 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/