NSWindow 关闭后 activateIgnoringOtherApps 和 makeKeyAndOrderFront 不起作用

Kyl*_*KIM 2 macos cocoa nswindow nsstoryboard

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

func setWindowVisible() {
    NSApp.activateIgnoringOtherApps(ture)
    NSApp.mainWindow?.makeKeyAndOrderFront(self)
}
Run Code Online (Sandbox Code Playgroud)

这使我的应用程序位于前面。但是一旦我单击关闭按钮(窗口上的红色按钮),它就永远不起作用。

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

我已经设定

NSApp.mainWindow?.releasedWhenClosed = false
Run Code Online (Sandbox Code Playgroud)

在 applicationDidFinishLaunching() 中

有人可以帮我吗?

man*_*ahn 7

设置没有任何效果,因为此时该releasedWhenClosed属性为零。\xe2\x86\x92 该方法执行后创建窗口。applicationDidFinishLaunchingmainWindow

\n\n

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

\n\n

关闭窗口后,mainWindow 属性可能为零,因为这样就不再有 mainWindow 了。来自文档:

\n\n
\n

当 app\xe2\x80\x99s Storyboard 或 nib 文件尚未完成加载时,此属性中的值为 nil。当应用程序处于非活动状态或隐藏时,它也可能为零。

\n
\n\n

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

\n\n
NSApp.activateIgnoringOtherApps(true)\nNSApp.windows[0].makeKeyAndOrderFront(self)\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您有多个窗口,您需要在数组中找到正确的一个。

\n