所有支持NSWindowRestoration的OS应用程序都可以通过选择菜单项“退出并关闭所有窗口”(选项-命令Q)来关闭。这将禁用状态恢复,下次打开应用程序时,所有窗口都将处于默认位置。
菜单项在terminate:上触发NSApplication方法。但是,常规的“关闭应用程序”菜单也是如此(命令Q)。
如何以编程方式完成“退出并关闭所有窗口”?,我真的需要自己关闭所有窗口,然后调用terminate:吗?
当两个动作连接到同一个terminate:方法时,苹果如何神奇地决定该做什么呢?
发布于 2016-06-13 00:27:14
似乎没有什么很好的方法可以做到这一点。您可能需要向Apple请求一个bug (以及您为什么需要它的解释)。
当两个动作连接到同一个
terminate:方法时,苹果如何神奇地决定该做什么呢?
那么,看看AppKit的反汇编,-[NSApplication terminate:]似乎会检查发送方是否是NSMenuItem的一个实例。如果是,则检查其userInterfaceItemIdentifier是否等于@"NSAlternateQuitMenuItem"。
我想,您可以创建一个带有该标识符的虚拟菜单项,并将其作为发送方传递给-terminate:,尽管这依赖于实现细节,因此它随时可能中断。
另一个控制因素是设置系统首选项> General >“退出应用程序时关闭窗口”。这与用户默认键NSAlternateQuitMenuItem相对应,尽管这还是一个实现细节。似乎可以在调用-terminate:之前设置该设置,然后在-applicationWillTerminate:委托方法中删除该设置。(您的更改将与应用程序相关联。它们不会影响其他应用程序或系统首选项中的设置。)当然,为了获得委托方法调用,您必须确保禁用突然终止。
https://stackoverflow.com/questions/37780163
复制相似问题