2

我有一个将菜单项添加到 Finder 上下文菜单的应用程序。

目前我的菜单项显示为任何选定的项目。

我想执行一些过滤并且不显示某些路径的菜单项。

我相信我已经按照 Apple 的服务实施指南1中的说明进行操作,但我没有任何运气能够做到这一点。

我的理解是我的过滤逻辑应该在我的响应者的validRequestorForSendType方法中执行。我的问题是这个方法永远不会被调用,所以我假设它没有在响应者链中注册,但我无法弄清楚我错过了什么。

我是 OSX 的新手,我继承了这段代码,所以这里有一些额外的上下文可能会提供一些线索:

应用程序唯一的 UI 存在是作为系统菜单栏中的托盘图标。没有任何东西来自 NSApplication(据我所知,它是一个 NSResponder)。有一个名为 AppDelegate 的类,它派生自NSObject <NSApplicationDelegate>设置服务提供者的位置。在applicationDidFinishLaunching这堂课中:

  • 分配一个 MyResponder(派生自 NSResponder)实例
  • NSRegisterServicesProvider(myResponder, @" portName from my Info.plist ")
  • [NSApp setServicesProvider:myResponder]
  • NSUpdateDynamicServices()

在 MyResponder 的initialize()函数中,它调用[NSApp registerServicesMenuSendTypes]并定义validRequestorForSendType了 Info.plist 中列出的我的服务函数。

如前所述,我运行我的应用程序,打开 Finder,单击路径并获取我的应用程序的菜单项,但由于validRequestorForSendType未调用 MyResponder 的,我没有机会对其进行过滤。

关于我所缺少的任何想法?我是否需要在我跳过的 XCode 的 xib 查看器中连接一些东西?

4

0 回答 0