可以通过选择菜单条目"退出并关闭所有Windows"来关闭所有支持NSWindowRestoration
的OS X应用程序。 (选项 - 命令Q)。这会禁用状态恢复,下次打开应用程序时,所有窗口都将处于默认位置。
菜单条目触发terminate:
上的NSApplication
方法。但常规"关闭应用程序"菜单以及(命令Q)。
如何执行"退出并关闭所有Windows"以编程方式?我是否真的需要自己关闭所有窗口,然后拨打terminate:
?
当两个动作都连接到同一个terminate:
方法时,Apple如何神奇地决定要做什么?
答案 0 :(得分:1)
似乎没有很好的方法可以做到这一点。您可能想要提交Apple请求的错误(以及您需要解释的原因)。
当两个动作都连接到同一个
terminate:
方法时,Apple如何神奇地决定要做什么?
好吧,看看AppKit的反汇编,似乎-[NSApplication terminate:]
检查发件人是否是NSMenuItem
的实例。如果是,则检查其userInterfaceItemIdentifier
是否等于@"NSAlternateQuitMenuItem"
。
我想,您可以使用该标识符创建一个虚拟菜单项,并将其作为发件人传递给-terminate:
,但由于这依赖于实现细节,因此可能随时中断。
另一个控制因素是系统偏好设置>的设置。一般> “退出应用时关闭窗口”。这对应于用户默认密钥NSAlternateQuitMenuItem
,但同样,这是一个实现细节。看来你可以在调用-terminate:
之前设置它,然后在-applicationWillTerminate:
委托方法中删除该设置。 (您的更改将与您的应用程序相关联。它们不会影响其他应用程序或“系统偏好设置”中的设置。)当然,您必须确保禁用突然终止以获取该委托方法调用。