2016-04-04 1 views
0

Я пытаюсь запустить 1 из 2 разных потоков через AppDelegate, но, похоже, борется.Какао: загрузить различные контроллеры просмотра в зависимости от ввода делегата приложения

смотри ниже, как изображение:

Storyboard with 2 views Как создать экземпляр каждый этих двух различных контроллеров отображения, если только один может быть привязан к основной 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 
       } 
+0

Почему вы не создавать две кнопки на главном окне, каждый из которых соединен с соответствующим контроллером зрения? –

ответ

0

Это не нужно держать SEGUE по умолчанию, который обеспечивает содержимое окна. Если вы удалите его и предоставите два контроллера представлений, которые могут быть созданы с помощью идентификатора, то ваш делегат приложения может решить, когда закончится запуск.

Такие, как:

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 
} 
+0

Phillip Mills - спасибо за это, но если бы я сделал это так, как бы я впоследствии вызывал контроллеры от этих контроллеров ... используя segues? –

+0

То же, что и в любых других обстоятельствах, насколько я могу судить. Я просто подключил segue в раскадровке с помощью кнопки на моем втором контроллере, чтобы отобразить третий контроллер в виде листа, и он работал нормально. –

+0

Хм - Интересно, если его ошибка тогда ... будет копаться и смотреть. –