Swift macOS-如果应用程序未激活,菜单操作不会触发任何操作

Swift macOS-如果应用程序未激活,菜单操作不会触发任何操作,swift,cocoa,nsmenu,nsmenuitem,responder-chain,Swift,Cocoa,Nsmenu,Nsmenuitem,Responder Chain,我正在构建这个将位于菜单栏上的应用程序 因此,与通常使用此类应用程序一样,您可以将statusItem菜单调整为应用程序的菜单 该菜单上的项目触发第一响应程序上的操作,在我的情况下,第一响应程序就是该应用程序的viewController 这就是问题所在:如果应用程序处于活动状态,则此操作有效,但如果应用程序未处于活动或隐藏状态,则此操作失败。我猜由菜单项触发的操作将触发响应链,但没有人监听,因为应用程序隐藏或未激活 那样的话我该怎么办?我应该创建一个单例并将该单例添加到响应器链中吗?我说单件是

我正在构建这个将位于菜单栏上的应用程序

因此,与通常使用此类应用程序一样,您可以将statusItem菜单调整为应用程序的菜单

该菜单上的项目触发第一响应程序上的操作,在我的情况下,第一响应程序就是该应用程序的viewController

这就是问题所在:如果应用程序处于活动状态,则此操作有效,但如果应用程序未处于活动或隐藏状态,则此操作失败。我猜由菜单项触发的操作将触发响应链,但没有人监听,因为应用程序隐藏或未激活

那样的话我该怎么办?我应该创建一个单例并将该单例添加到响应器链中吗?我说单件是因为它总是被载入内存。这个单例必须是某个特殊类的子类吗


如果此菜单中的操作会触发viewController中的内容,该怎么办?

您应该能够在AppDelegate中处理第一响应程序,如果应用程序未处于活动状态,该程序应该可以工作。

请参阅并记下讨论:

只有在启用了可访问性或您的应用程序受信任可访问性时,才能监视与密钥相关的事件(请参阅)


是否该操作根本没有响应,或者该操作实际上正在被调用,但试图使用不存在的窗口执行某些操作?如果应用处于活动状态,则会调用连接到菜单项的操作,但如果该应用在其他应用后面,而另一个应用处于活动状态,则该操作不会执行任何操作。我的意思是,我选择了应用程序菜单上位于菜单栏上的项目,但什么也没发生。我所说的菜单栏是指当应用程序接近时钟时。我已通过在选择菜单时强制应用程序处于活动状态来“解决”这一问题,但这并不好,原因有几个。首先是因为它需要两次单击,一次是激活应用程序,另一次是在选择菜单项时触发操作。我看到菜单栏上的其他应用程序只需一次单击即可完成操作。你不需要两次单击,只需让菜单操作将你的应用程序窗口置于最前面,或在激活应用程序之前禁用需要窗口的项目。你的菜单连接到视图控制器有点奇怪。视图控制器旨在(您知道)控制视图,但您希望在没有视图处于活动状态时此功能正常工作。您不应该将其连接到应用程序代理吗?