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

Objective c OSX如何加载基于故事板的应用程序,以及如何进行窗口管理?,objective-c,macos,swift,xcode-storyboard,window-management,Objective C,Macos,Swift,Xcode Storyboard,Window Management,我正在开发一款全新的OSX应用程序,我已经大胆地使用了一些以前很少使用的技术。(我是一名iOS开发人员。) 我在我的应用程序中使用故事板、Swift和核心数据,所有这些都来自Xcode模板。当我的应用程序启动时,它会从情节提要创建一个NSWindowController 在我用Objective-C制作的另一个OS X应用程序中,我使用委托方法applicationShouldHandleReopen:hasVisibleWindows:,告诉窗口控制器调出窗口控制器的窗口 我知道Swift中的

我正在开发一款全新的OSX应用程序,我已经大胆地使用了一些以前很少使用的技术。(我是一名iOS开发人员。)

我在我的应用程序中使用故事板、Swift和核心数据,所有这些都来自Xcode模板。当我的应用程序启动时,它会从情节提要创建一个NSWindowController

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

我知道Swift中的语言语义保持不变,但核心数据和故事板给我留下了两个问题

  • 我的项目使用核心数据这一事实是否会将其转变为“基于文档的应用程序”,从而改变windows的管理方式

  • 在我以前的项目中,我使用NIB而不是故事板。似乎我正在手动实例化一个
    NSWindowController
    ,并使用它来管理重新打开。如果有一种方法可以达到我的故事板毫无疑问是为我制作的,那将是最佳的,对吗?只是将插座连接到我的应用程序代理是一种方式吗?还有别的会议吗

  • 否。检查“创建基于文档的应用程序”使其成为基于文档的应用程序。使用核心数据的决定是独立的

  • 当你制作一个基于OSX文档的应用程序时,你得到的故事板有点非典型。请注意,故事板中没有箭头指示入口点的位置。发生的是“文档”被实例化。它有一个方法:

    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 Window controller”(恰好是窗口控制器)的控制器。文档保存了WindowController的集合。所以文档实例化它并将windowController添加到该列表中

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


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

    相关:您一下子吃了太多东西。文档体系结构非常不同,并为层次结构添加了更多内容。每个NSDocument实例可以有多个窗口控制器。我建议首先分别处理故事板、核心数据和文档拱门。我以前使用过核心数据和故事板,但从未在这种情况下使用过。(我没有选择基于文档的应用程序,所以我认为这不是问题所在。)Core data绝对不会自动生成基于文档的应用程序。此外,您还必须选择该选项。它只是给你一个与ios相同的对象存储。在用户通过单击dock图标创建新文档之前,默认情况下你不会得到一个窗口。不过这可能会更好,因为你可以在icloud/hd中显示类似于文件列表的内容,比如TextEdit或Pages,而不是当你打开一个应用程序时,必须自动发送一条“newDocument:”消息。这是有道理的。