我有一个将菜单项添加到 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 查看器中连接一些东西?