仍然打开的视图控制器使我的应用程序无法退出

View controllers that are still open are keeping my app from being able to quit

我想为我正在开发的 iOS 应用程序做一个快速 cocoa 版本来帮助我测试,正如您可能已经知道的那样 - 它并不快,但我学到了很多东西。我只剩下一个小问题了。好吧,我这样做的方式可能有问题,但现在除了这件小事外一切都很好 - 我不知道最后如何退出应用程序。

我很确定这是因为我有一些视图控制器仍然通过 sheet 风格的 segues 堆叠在一起。有没有办法关闭所有视图控制器并退出应用程序?或者如果没有,我该怎么做?我已经尝试了各种各样的事情——我知道我可以在 3 个视图控制器中的每一个上放置一个“退出”按钮,这些视图控制器需要在返回到原始的“介绍”类型屏幕之前关闭,这是唯一可以退出我的屏幕应用程序,但我真的不希望人们必须这样做。

如果您的应用由于显示某些 modal 视图而无法退出,您可以尝试将 NSWindow preventsApplicationTerminationWhenModal 属性 设置为 NO:

window.preventsApplicationTerminationWhenModal = false //--swift
[window setPreventsApplicationTerminationWhenModal:NO] //--objc

这应该在您打开的每个模式 window 上完成。

编辑:

要牢记的重要一点是,您应该在与警报关联的 window 上设置上述 属性,而不是您的主要 window。如果我以编程方式创建一个 NSAlert,那么这将起作用:

let alert = NSAlert()
let w = alert.window as NSWindow //-- alert.window return `id`, so let's cast it
w.preventsApplicationTerminationWhenModal = false

因此,您可以将 sheet 绑定到一个变量,然后设置它的 preventsApplicationTerminationWhenModal 属性,或者您可以尝试 sheet 本身的运行时属性(指定完整的密钥路径,包括 window.prevents...)。