Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 窗口控制器关闭不完全删除窗口_Swift_Macos_Cocoa - Fatal编程技术网

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
,以消除所有可能的强引用。