我遇到的问题是我丢失了在AppDelegate中声明的NSWindows的引用,代码如下。
class AppDelegate: NSObject, NSApplicationDelegate {
var window1: CustomWindow1!
var window2: CustomWindow2!
func setupWindows() {
self.window1 = CustomWindow1()
self.window2 = CustomWindow2()
let vc2 = VIEWOFSOMEVIEWCONTROLLER()
self.window2.contentView.addSubview(vc2.view)
self.window1.grandchildVC = vc2
self.window1.addChildWindow(self.window2!, ordered: NSWindowOrderingMode.Above)
// etc.
}
@IBAction addWindowsAgain(sender: AnyObject) {
// This is where if fails
if self.window1 != nil {
self.window1 == nil
}
}
}
class CustomWindow1() {
var grandchildVC: NSViewController
func deleteChildWindowThenSelf() {
self.grandchildVC.view.window.close()
self.close()
}
}
我可以调用deleteChildWindowThenSelf()
,并按预期删除窗口,但在AppDelegate中调用addWindowsAgain
时,如果失败并显示lldb
错误。当调用close
时,AppDelegate会丢失那些窗口变量,还是我误解了某些东西?
答案 0 :(得分:2)
NSWindow
有一个变量releasedWhenClosed
,默认情况下为true
自定义创建的窗口,除非窗口由窗口控制器拥有。
将变量设置为false
。