我从一个故事板项目开始。然后我把菜单栏项目。
单击菜单栏项时,AppDelegate.swift中会触发以下方法。

func setWindowVisible() {
    NSApp.activateIgnoringOtherApps(ture)
    NSApp.mainWindow?.makeKeyAndOrderFront(self)
}


这使我的应用程序处于领先地位。但是,一旦我单击关闭按钮,即窗口上的红色按钮,它便永远无法工作。

不管我关闭窗口,它过去都可以在基于非故事板的项目中工作。

我已经设定

NSApp.mainWindow?.releasedWhenClosed = false


在applicationDidFinishLaunching()中

谁能帮我吗?

最佳答案

releasedWhenClosed中设置applicationDidFinishLaunching无效,因为此时mainWindow属性为nil。 →执行该方法后,将创建窗口。

无论如何,在Interface Builder中创建窗口时,releasedWhenClosed都默认为false。

关闭窗口后,mainWindow属性可能为nil,因为那样就不再有mainWindow了。从文档:


  当应用的故事板或Nib文件尚未完成加载时,此属性中的值为nil。当应用程序处于非活动状态或隐藏状态时,它也可能为零。


通过从windowsNSApp数组中访问该窗口,我能够再次显示该窗口(关闭后)。

NSApp.activateIgnoringOtherApps(true)
NSApp.windows[0].makeKeyAndOrderFront(self)


如果您有多个窗口,则需要在数组中找到合适的窗口。

10-07 23:30