2014-12-03 37 views
9

我正在开发一款全新的OS X应用程序,并且我采用了一些我以前没有用过的技术来开发大胆的工作路线。 (我是一名iOS开发人员。)OS X如何加载基于故事板的应用程序,它如何进行窗口管理?

我在我的应用程序中使用Storyboard,Swift和Core Data,全部来自Xcode模板。当我的应用程序启动时,它会从Storyboard创建一个NSWindowController。

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

我知道语言语义在Swift中保持不变,但核心数据和故事板让我有两个问题。

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

  2. 在我的旧项目中,我使用笔尖而不是故事板。看来我手动实例化NSWindowController,并用它来管理重新打开。如果有一种方法可以让我的Storyboard毫无疑问地为我所用,那将是最佳的,对吗?只需在我的App Delegate上添加一个插件即可。还有另一个约定吗?

+0

相关: http://stackoverflow.com/questions/3683349/nswindowcontroller-clarification-of-understanding – Moshe 2014-12-03 03:52:23

+0

你一次性咬掉太多。 – uchuugaka 2014-12-03 03:53:24

+0

文档体系结构完全不同,并且增加了层次结构。每个NSDocument实例可以有多个窗口控制器。我建议先分别处理故事板,核心数据和文档拱门。 – uchuugaka 2014-12-03 03:55:43

回答

6
  1. 号检票“创建基于文档的应用程序”是什么使得它基于文档的应用程序。使用核心数据的决定是分开的。

  2. 当您制作OS X基于文档的应用程序时,故事板有点不典型。注意故事板中没有箭头告诉你它的入口在哪里。会发生什么是“文档”被实例化。它有一个方法:

    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) 
    } 
    

它去寻找在故事板用于与所述标识符@“文档窗口控制器”(这恰好是该窗口控制器)的控制器。文档保持windowControllers的集合。所以Document实例化它并将windowController添加到该列表中。

所以文件已经在Document.windowControllers窗口控制器参考

(谁能告诉我,为什么文件被创建,虽然我不能看到什么是真正触发其创造?)

+0

它看起来像你不会默认得到一个窗口,直到用户通过点击停靠图标创建一个新文档。它可能是更好的,因为你可以显示类似于icloud/hd中的文件列表,类似于TextEdit或Pages中的文件列表 – Chris 2015-01-01 09:13:06

+0

必须有一个自动的“newDocument:”消息在您打开应用程序时发送。这就说得通了。 – 2015-01-02 17:27:19

相关问题