NSWindow 在 showWindow 后自动关闭

NSWindow automatically closes after showWindow

我正在尝试在 Storyboard 中打开 NSWindow。 我已正确实例化控制器,window 打开但立即消失。

   var sb : NSStoryboard?
   var vc : NSWindowController?
   @IBAction func openWindow(sender: AnyObject) {
        let sb = NSStoryboard(name: "NewStoryBoard", bundle: nil)
        let vc = sb.instantiateControllerWithIdentifier("windowController")
        vc.showWindow(nil)
   }

如果变量在函数内部,我会理解这种行为。在这种情况下,ARC 会杀死 window.

在我的示例中,变量在函数之外,这应该防止变量被 ARC 杀死。

我的方法有什么问题吗? 谢谢!

实际上,在您的示例中,您有两组不同的变量。您的 let sb = ...let vc = ... 创建局部变量(同名)并在函数中使用时覆盖外部变量。您想要删除 let 限定符,以便它将值分配给函数外部的变量。

如果您删除两个 let 限定符,解开现在的可选项,并强制进行向下转换,那么您的 window 将保持不变。

注意:如果您不再需要您的故事板,实际上您可以删除 var sb... 并保留 let sb... 以便少展开一件东西。