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...
以便少展开一件东西。
我正在尝试在 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...
以便少展开一件东西。