关闭窗口然后选择另一个应用程序时Mac应用程序消失

Posted

技术标签:

【中文标题】关闭窗口然后选择另一个应用程序时Mac应用程序消失【英文标题】:Mac app disappears when window is closed then another app is selected 【发布时间】:2020-07-13 22:05:32 【问题描述】:

我在 Xcode 11.4 中创建了一个新的 macOS 项目,其中语言是 Swift,用户界面是 SwiftUI。在不对项目中的代码进行任何更改的情况下,通过执行以下步骤,该应用将从 Dock 中消失:

    通过运行 Xcode 项目启动 Mac 应用程序 关闭 Mac 应用程序的主窗口 选择另一个正在运行的应用程序,例如 Safari 原始 Mac 应用程序从 Dock 中消失,无法访问它

如果 Mac 应用程序的窗口打开,则不会发生此行为。我可以选择其他正在运行的应用程序,然后毫无问题地返回到原来的 Mac 应用程序。

【问题讨论】:

【参考方案1】:

这种行为称为Automatic Termination。我发现它是一个错误功能,但 Apple 认为它是一个功能。

您的应用可能并未真正退出。它可能只是看起来已经退出了。再次“启动”它只会让它重新出现在 Dock 中。也有可能一些看起来仍在运行的应用程序实际上已被系统终止。从理论上讲,如果您尝试切换到它们,它们将被启动并被告知恢复之前的状态,以保持它们一直在运行的错觉。在实践中,应用程序(甚至是 Apple 的)很少能正确地将事物恢复到原来的样子。

活动监视器中的进程列表真实反映了实际运行和未运行的内容。查看那里以确定您的应用是否真的被终止了。

开发人员应该选择加入自动终止,因为它需要对状态恢复进行显式编码。但是,Xcode 的应用程序项目/目标模板默认启用它。您可以从 Info.plist 中删除 NSSupportsAutomaticTermination 键以禁用它。

同样,如果您不准备支持它,您可能也想禁用突然终止。您将删除 NSSupportsSuddenTermination 键。

【讨论】:

我不知道这种行为。谢谢你向我指出。你有任何关于如何支持它的例子吗? 在默认的 Xcode 项目 Info.plist 中,我看到“应用程序可以被杀死以回收内存或其他特殊情况”。这和NSSupportsAutomaticTerminationNSSupportsSuddenTermination 一样吗? 它是NSSupportsAutomaticTermination。当 Info.plist 编辑器处于活动状态时,启用 Editor > Raw Keys & Values 即可查看。

以上是关于关闭窗口然后选择另一个应用程序时Mac应用程序消失的主要内容,如果未能解决你的问题,请参考以下文章

wpf关闭主窗口询问“退出”的问题

关闭 popOver

如何实现我另一个窗口关闭时,刷新这个窗口(C#中问题)

c#中点关闭窗口时怎么使窗口渐渐消失?

Mac OS 10.6 服务器上的 $PATH 变量不断重置

如何让tkinter自动关闭窗口后显示另一个窗口?