Objective c Finder NSService上下文菜单错误:找不到选择器的服务提供程序

Objective c Finder NSService上下文菜单错误:找不到选择器的服务提供程序,objective-c,xcode,macos,contextmenu,finder,Objective C,Xcode,Macos,Contextmenu,Finder,更新1:越来越近 IRC上有人提到我的NSPortName应该是我的应用程序,而不是Finder。我改变了这一点,现在当选择关联菜单时,我在我的应用程序中看到一条日志消息: Cannot find service provider for selector shareFile:userData:error: or shareFile:: for service shareFile 考虑到我确实注册了这样一个对象,这似乎很奇怪 我正在尝试为Finder设置NSService上下文菜单,以在某些

更新1:越来越近

IRC上有人提到我的NSPortName应该是我的应用程序,而不是Finder。我改变了这一点,现在当选择关联菜单时,我在我的应用程序中看到一条日志消息:

Cannot find service provider for selector shareFile:userData:error: or shareFile:: for service shareFile
考虑到我确实注册了这样一个对象,这似乎很奇怪


我正在尝试为Finder设置NSService上下文菜单,以在某些文件上触发我的应用程序

这些文件的扩展名为*.acxx,其操作仅用于共享。注意:我已将该捆绑包的所有引用更改为此发布的通用:com.mycompany.myproject

infoPlist中的“我的NSServices”部分如下所示:(注意,我还为*.acxx设置了文档类型/UTIs)

我在我的代码中的其他地方注册:

// Register services
if (self.shareSvcMgr == nil)
{
    self.shareSvcMgr = [[ACAShareServiceManager alloc] init];
}
[NSApp setServicesProvider:self.shareSvcMgr];
NSUpdateDynamicServices();
现在,当我运行应用程序并确保它已在pbs注册时,它看起来很好:

/System/Library/CoreServices/pbs -debug en|grep -i myproj
        NSBundleIdentifier = "com.mycompany.myproject";
        NSBundlePath = "/Users/me/Library/Developer/Xcode/DerivedData/myproject-gihhiqhnzhwqbchflymzyafwxvws/Build/Products/Debug/myproject.app";
            default = "Share with myproject";
            "com.mycompany.myproject.acxx"
因此,当我转到Finder并单击*.acxx文件时,果然在Finder->Services中,我的菜单项Share with myproject出现了

问题:

一切都很好,是吗?没有。当我点击“与我的项目共享”时,什么都没有发生。我在shareFile方法中设置了一个断点,程序正在运行,但是什么也没有发生,它从来没有被命中,等等

我曾读到,我可以使用-NSDebugServices调试Finder,但我似乎无法让它正常工作。我已经执行了:

/System/Library/CoreServices/Finder.app/Contents/MacOS/Finder -NSDebugServices com.mycompany.myproject
这似乎启动了一个过程,但我没有可以尝试与之交互的查找窗口

我不知道下一步该去哪里。当然,这个想法是在发送共享时将文件名或文件内容传递给我的应用程序,然后我就可以从那里做需要的事情


SendFileTypes的设置是否不正确,或者是否适用于此型号?谢谢你的帮助。谢谢

好的。IRC上有人指出我的方法定义缺少一些东西:

- (void)shareFile:(NSPasteboard*)pboard userData:(NSString*) error:(NSString**)err
它缺少一个变量定义(这会完全搞砸选择器匹配)。所以应该是这样的:

- (void)shareFile:(NSPasteboard*)pboard userData:(NSString*)***udata*** error:(NSString**)err

一旦我改变了这一点,选择器最终开始被调用=)

我遇到了同样的问题,并且能够通过删除派生数据来解决这个问题

我想发生的事情是,我试图通过创建一个虚拟应用程序来测试一些东西,我对服务使用了相同的消息名称。通过从虚拟应用程序中删除派生数据,一切都开始工作

您应该能够在以下路径的某个目录中找到派生数据:

~/Library/Developer/Xcode/DerivedData/

删除旧内容,它可能会为您解决问题。

您好,我已经在projectinfo.plist文件中实现了NSService。但直到没有菜单项外接程序查找器。你能告诉我怎么解决这个问题吗。
- (void)shareFile:(NSPasteboard*)pboard userData:(NSString*)***udata*** error:(NSString**)err
~/Library/Developer/Xcode/DerivedData/