我创建了一个服务,以便在Finder的上下文菜单中显示一个项目。
我的应用程序中有以下代码:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[NSApp setServicesProvider:self];
NSUpdateDynamicServices();
}
我想使用对服务本身的操作从上下文菜单中删除该项。
我试着这样做:
NSUnregisterServicesProvider([[NSBundle mainBundle] bundleIdentifier]);
但它杀死所有服务几秒钟,当它恢复时我的服务在Finder上下文菜单的服务列表中。
如何从finder的上下文菜单中删除我的NSService项?
答案 0 :(得分:0)
您不应使用此功能取消注册应用程序提供的服务。对于应用程序的服务,您应该使用NSApplication的
setServicesProvider:
方法,传递nil
参数。
所以,除了通过applicationDidFinishLaunching:
而不是nil
之外,您可以执行self
中的操作。 (我不知道您是否需要执行NSUpdateDynamicServices
步骤。)
答案 1 :(得分:0)
例如,如果您拥有卸载程序,则可以通过以下方式从“服务”菜单中删除菜单项:
[NSApp setServicesProvider:self]
的应用程序)NSUpdateDynamicServices()
它重建数据库并检查已注册以提供服务的应用程序的可用性。
如果没有帮助,请使用/System/Library/CoreServices/pbs -dump_pboard
在Terminal中转储数据库,并查找列出的服务和URL。可能在其他地方有该应用程序的另一个副本,而聪明的系统找到了它。