0

我创建了一个服务,以便在 Finder 的上下文菜单中显示一个项目。

我的应用程序中有以下代码:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [NSApp setServicesProvider:self];
    NSUpdateDynamicServices();
}

我想使用对服务本身的操作从上下文菜单中删除该项目。

我试着做:

NSUnregisterServicesProvider([[NSBundle mainBundle] bundleIdentifier]);

但它杀死了所有服务几秒钟,当它恢复我的服务时,我的服务在 Finder 上下文菜单的服务列表中。

如何从查找器的上下文菜单中删除我的 NSService 项?

4

2 回答 2

0

文档说

您不应使用此功能取消注册您的应用程序提供的服务。对于您的应用程序的服务,您应该使用setServicesProvider:NSApplication 的方法,传递一个nil参数。

所以,做你在 中所做的applicationDidFinishLaunching:,除了通过nil而不是self。(我不知道您是否需要执行该NSUpdateDynamicServices步骤。)

于 2013-07-08T04:58:10.093 回答
0

例如,如果您有一个卸载程序,您可以通过以下方式从服务菜单中删除您的菜单项:

  1. 删除提供服务的应用程序(您调用的那个[NSApp setServicesProvider:self]
  2. 称呼NSUpdateDynamicServices()

它重建数据库并检查应用程序的可用性,注册以提供服务。

如果没有帮助,请在终端中转储数据库/System/Library/CoreServices/pbs -dump_pboard并查找您的服务和为其列出的 url。其他地方可能有另一个应用程序副本,聪明的系统找到了它。

于 2018-12-28T10:25:23.300 回答