9

我正在开发一个全新的 OS X 应用程序,并且我采取了大胆的做法,使用了一些我以前很少使用的技术。(我是一名 iOS 开发人员。)

我在我的应用程序中使用 Storyboards、Swift 和 Core Data,所有这些都来自 Xcode 模板。当我的应用程序启动时,它会从 Storyboard 创建一个 NSWindowController。

在我用 Objective-C 制作的另一个 OS X 应用程序中,我使用委托方法applicationShouldHandleReopen:hasVisibleWindows:告诉窗口控制器调出窗口控制器的窗口。

我知道 Swift 中的语言语义保持不变,但 Core Data 和 Storyboard 给我留下了两个问题。

  1. 我的项目使用 Core Data 的事实是否将其更改为“基于文档的应用程序”,从而改变了管理窗口的方式?

  2. 在我的旧项目中,我使用的是笔尖而不是情节提要。似乎我正在手动实例化一个NSWindowController,并使用它来管理重新打开。如果有办法获得我的 Storyboard 无疑为我制作的那个,那将是最佳的,对吗?只是将插座连接到我的 App Delegate 是要走的路吗?还有其他约定吗?

4

1 回答 1

6
  1. 不。检查“创建基于文档的应用程序”是使它成为基于文档的应用程序的原因。使用 Core Data 的决定是独立的。

  2. 当你制作一个基于 OS X 文档的应用程序时,你得到的 Storyboard 有点不典型。请注意,情节提要中没有箭头告诉您入口点在哪里。发生的是“文档”被实例化。它有一个方法:

    override func makeWindowControllers() {
        // Returns the Storyboard that contains your Document window.
        let storyboard = NSStoryboard(name: "Main", bundle: nil)!
        let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as NSWindowController
        self.addWindowController(windowController)
    }
    

它在情节提要中寻找具有标识符@“文档窗口控制器”的控制器(恰好是那个窗口控制器)。Document 保存了一个 windowControllers 的集合。所以 Document 实例化它并将 windowController 添加到该列表中。

所以 Document 在 Document.windowControllers 中已经有了对窗口控制器的引用

(有人可以告诉我为什么要创建文档吗?​​我看不出是什么真正触发了它的创建)

于 2014-12-22T06:38:47.833 回答