【发布时间】:2015-09-02 06:05:30
【问题描述】:
我遇到的问题是我失去了对 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 是否会丢失这些窗口变量,还是我误解了什么?
【问题讨论】:
-
您的代码有几个问题。首先,您的 window1 和 window2 变量应该是可选的,因为它们不会使用类进行初始化,并且您确实会将它们的值设置为 nil。 -- 此外,您的 CustomWindow1 不是任何东西的子类,您可能希望它是 NSWindow 或 NSWindowController 的子类。通常,您初始化一个 NSWindowController 并保留对它的引用,而不是它的窗口。
-
@ElmerCat 感谢您指出它应该是可选的。其次,对不起,我忘了写我的子类。是的,它是 NSWindow 的子类。