我从一个故事板项目开始。然后我把菜单栏项目。
单击菜单栏项时,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。当应用程序处于非活动状态或隐藏状态时,它也可能为零。
通过从windows
的NSApp
数组中访问该窗口,我能够再次显示该窗口(关闭后)。
NSApp.activateIgnoringOtherApps(true)
NSApp.windows[0].makeKeyAndOrderFront(self)
如果您有多个窗口,则需要在数组中找到合适的窗口。