OS X如何加载基于故事板的应用程序,以及它如何进行窗口管理?

Mos*_*she 9 macos objective-c window-management xcode-storyboard swift

我正在开发一个全新的OS X应用程序,我采用了一些大胆的工作方式,使用了一些我之前没有用过的技术.(我是iOS开发人员.)

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

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

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

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

  2. 在我的旧项目中,我使用的是笔尖而不是故事板.似乎我手动实例化NSWindowController那里,并使用它来管理重新打开.如果有一种方法可以获得我的故事板无疑为我做的那个,那将是最佳的,对吧?只是将一个插座连接到我的应用程序代表的方式去?还有其他约定吗?

The*_*ppy 6

  1. 不.检查"创建基于文档的应用程序"是使其成为基于文档的应用程序的原因.使用核心数据的决定是分开的.

  2. 制作基于OS X Document的应用程序时获得的故事板有点不典型.请注意,故事板中没有箭头告诉您入口的位置.会发生什么是"文档"被实例化.它有一个方法:

    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)
    }
    
    Run Code Online (Sandbox Code Playgroud)

它会在故事板中查找带有标识符@"文档窗口控制器"的控制器(恰好就是窗口控制器).Document保留了windowControllers的集合.所以Document实例化它并将windowController添加到该列表中.

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

(有人可以告诉我为什么创建文档?我看不到实际触发它的创建)