Cocoa:根据 App Delegate 的输入加载不同的视图控制器

Cocoa: Load Different View Controllers depending on input from App Delegate

我正在尝试通过 AppDelegate 触发 2 个不同流程中的 1 个,但似乎很难。

见下图:

如果只有一个可以绑定到主 NSWindow 控制器,我该如何分别实例化这两个不同的视图控制器?

我设法使用 "addChildWindow" 使用以下代码触发它们 - 但是我无法继续到任何后续视图控制器。

这是我用来实例化视图控制器的代码:

   if let pboardString = pboard.stringForType(NSStringPboardType){
            print(pboardString)
           let storyboard = NSStoryboard(name: "Main", bundle: nil)
            let destcontroller  =  storyboard.instantiateControllerWithIdentifier("pickProject") as! WizardTextFromPasteboardVC
            destcontroller.weburlFromPaste = pboardString

            let numWindows = NSApplication.sharedApplication().windows
            if let window = NSApplication.sharedApplication().mainWindow {
                if numWindows.count >= 1{
                    let childWindow = NSWindow(contentViewController: destcontroller)
                    window.addChildWindow(childWindow, ordered: .Above)
                }
                else if numWindows.count == 0 {
                    window.contentViewController = destcontroller
                }

没有必要保留提供 window 内容的默认转场。如果你删除它并提供两个可以通过 id 实例化的视图控制器,那么你的应用程序委托可以决定何时启动完成。

如:

let selection: Int = 2

func applicationDidFinishLaunching(aNotification: NSNotification) {
    let storyboard = NSStoryboard(name: "Main", bundle: nil)
    var controller: NSViewController
    if selection == 1 {
        controller = storyboard.instantiateControllerWithIdentifier("view_controller") as! NSViewController
    } else {
        controller = storyboard.instantiateControllerWithIdentifier("view_controller_2") as! NSViewController
    }
    let window = NSApp.windows[0]
    window.contentViewController = controller
}