Swift 窗口控制器关闭不完全删除窗口
我有两扇窗户。在第一个窗口中,我使用以下代码创建第二个窗口:Swift 窗口控制器关闭不完全删除窗口,swift,macos,cocoa,Swift,Macos,Cocoa,我有两扇窗户。在第一个窗口中,我使用以下代码创建第二个窗口: self.toolsWindowController = ToolsWindowController() ToolsWindowController是我从Nib加载的一个简单窗口: class ToolsWindowController: NSWindowController { override var windowNibName : NSNib.Name! { return NSNib.Name(rawV
self.toolsWindowController = ToolsWindowController()
ToolsWindowController
是我从Nib加载的一个简单窗口:
class ToolsWindowController: NSWindowController {
override var windowNibName : NSNib.Name! {
return NSNib.Name(rawValue: "ToolsWindow")
}
}
然后在第一个窗口中关闭工具窗口:
toolsWindowController?.close()
窗口仍然存在。重新打开窗口后,计数增加
print(NSApplication.shared.windows.count)
我试过这个方法,但没用。如何从内存中完全删除窗口。找到了一个解决方案,在
deinit
方法中创建window=nil
。同样在我的例子中,我有一个window.styleMask.insert(.fullScreen)
全屏文件掩码,用于创建覆盖窗口对象。所以你也需要移除它
class ToolsWindowController: NSWindowController {
override var windowNibName : NSNib.Name! {
return NSNib.Name(rawValue: "ToolsWindow")
}
deinit {
NotificationCenter.default.removeObserver(self)
self.window?.styleMask.remove(.fullScreen)
self.window = nil
}
}
然后
self.toolsWindowController=nil
做这个工作你说的“仍然存在”是什么意思?它在屏幕上可见吗?您是否希望toolsWindowController
变为nil
?(没有,你必须自己做。)@ctietze关闭NSApplication.shared.windows
列表中的窗口后。我想完全删除它。我试图设置variable=nil,没有帮助看起来它每次都使用相同的前一个nib文件无论Interface Builder说什么,检查window.isReleasedWhenClosed
是否为真;但由于您使用的是NSWindowController
。尝试在ToolsWindowController.windowshouldlclose(:)
中设置self.window=nil
,然后在调用close()
的代码中设置ToolsWindowController=nil
,以消除所有可能的强引用。