在AppDelegate中丢失对NSWindows的引用

时间:2015-09-02 06:05:30

标签: macos swift cocoa

我遇到的问题是我丢失了在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会丢失那些窗口变量,还是我误解了某些东西?

1 个答案:

答案 0 :(得分:2)

NSWindow有一个变量releasedWhenClosed,默认情况下为true自定义创建的窗口,除非窗口由窗口控制器拥有。

将变量设置为false