首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不编码窗口状态的情况下以编程方式终止NSApp?

如何在不编码窗口状态的情况下以编程方式终止NSApp?
EN

Stack Overflow用户
提问于 2016-06-12 23:39:17
回答 1查看 460关注 0票数 1

所有支持NSWindowRestoration的OS应用程序都可以通过选择菜单项“退出并关闭所有窗口”(选项-命令Q)来关闭。这将禁用状态恢复,下次打开应用程序时,所有窗口都将处于默认位置。

菜单项在terminate:上触发NSApplication方法。但是,常规的“关闭应用程序”菜单也是如此(命令Q)。

如何以编程方式完成“退出并关闭所有窗口”?,我真的需要自己关闭所有窗口,然后调用terminate:吗?

当两个动作连接到同一个terminate:方法时,苹果如何神奇地决定该做什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-13 00:27:14

似乎没有什么很好的方法可以做到这一点。您可能需要向Apple请求一个bug (以及您为什么需要它的解释)。

当两个动作连接到同一个terminate:方法时,苹果如何神奇地决定该做什么呢?

那么,看看AppKit的反汇编,-[NSApplication terminate:]似乎会检查发送方是否是NSMenuItem的一个实例。如果是,则检查其userInterfaceItemIdentifier是否等于@"NSAlternateQuitMenuItem"

我想,您可以创建一个带有该标识符的虚拟菜单项,并将其作为发送方传递给-terminate:,尽管这依赖于实现细节,因此它随时可能中断。

另一个控制因素是设置系统首选项> General >“退出应用程序时关闭窗口”。这与用户默认键NSAlternateQuitMenuItem相对应,尽管这还是一个实现细节。似乎可以在调用-terminate:之前设置该设置,然后在-applicationWillTerminate:委托方法中删除该设置。(您的更改将与应用程序相关联。它们不会影响其他应用程序或系统首选项中的设置。)当然,为了获得委托方法调用,您必须确保禁用突然终止。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37780163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档