我正试图在故事板中打开NSWindow。 我已正确实例化控制器,窗口打开但立即消失。
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)
}
如果变量将在func中,我会理解这种行为。在这种情况下,ARC会杀死窗口。
在我的样本中,vars位于func之外,这样可以防止vars杀死vars。
我的方式出了什么问题? 谢谢!
答案 0 :(得分:1)
实际上,在您的示例中,您有两组不同的变量。您的let sb = ...
和let vc = ...
创建局部变量(具有相同的名称),并在函数中使用时覆盖外部变量。您希望删除let限定符,以便将值分配给函数外部的变量。
如果同时删除let
个限定符,解包现在的选项,并强制向下转换,那么你的窗口就会保持不变。
注意:如果您不再需要故事板,则可以实际删除var sb...
并保留let sb...
,以便少量打开包装。