Life, Education, Death

プログラミング以外でも思ったことをつらつらと書きたい

AppDelegateでStoryboardからNSWindowControllerを取得してウィンドウを表示するだけでハマった

XCode Version 7.1.1 (7B1005) Swift2.1で試しました。

かなりはまってしまったが、答えはここにあった。表示したいウィンドウのNSWindowControllerをメンバ変数等で拘束しておかないと正しく動作しなかった。 stackoverflow.com

最小コードにすると以下のようにshowWindowするときにインスタンス化されたコントローラーを束縛しておかないといけない。myControllerへの代入コードを除去すると表示されなくなってしまう。

var myController:NSWindowController? = nil

func applicationDidFinishLaunching(aNotification: NSNotification) {
    let controller = mainStoryboard.instantiateInitialController() as? NSWindowController
    myController = controller
    myController?.showWindow(nil)
}