Objective c NSService未调用其NSMessage
我正在尝试添加一个Finder服务,在我希望该服务完成其工作之前,一切看起来都很好 这是我的AppDelegate.m中的方法:Objective c NSService未调用其NSMessage,objective-c,macos,cocoa,finder,Objective C,Macos,Cocoa,Finder,我正在尝试添加一个Finder服务,在我希望该服务完成其工作之前,一切看起来都很好 这是我的AppDelegate.m中的方法: -(void)uploadFromPasteboard:(NSPasteboard *)pboard userData:(NSString *)udata error:(NSString **)err { NSString *filename = [pboard stringForType:NSURLPboardType]; dbg(@"file: %
-(void)uploadFromPasteboard:(NSPasteboard *)pboard userData:(NSString *)udata error:(NSString **)err
{
NSString *filename = [pboard stringForType:NSURLPboardType];
dbg(@"file: %@", filename);
}
plist配置:
<key>NSServices</key>
<array>
<dict>
<key>NSRequiredContext</key>
<dict/>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>Upload File</string>
</dict>
<key>NSMessage</key>
<string>uploadFromPasteboard</string>
<key>NSPortName</key>
<string>Finder</string>
<key>NSSendTypes</key>
<array>
<string>NSURLPboardType</string>
</array>
<key>NSReturnTypes</key>
<array/>
</dict>
</array>
NSServices
NSRequiredContext
NSMenuItem
违约
上载文件
NSMessage
从粘贴板上传
NSPortName
发现者
NSSENDTYPE
NSURLBOARDTYPE
NSReturnTypes
一切似乎都很好,服务显示在“服务”菜单中,但当我单击它时,什么都没有发生,没有日志或其他任何内容,比如根本没有调用它
有人能告诉我出了什么问题吗,因为我开始紧张地说:(你正在设置你的服务提供商实例吗?像这样(from:): 仅在应用程序委托类中使用此方法是不够的。在标准应用程序设置中,在应用程序委托中使用此方法可能就足够了:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[NSApp setServicesProvider: self];
}
另外,您正在为NSPortName
指定“Finder”。这可能不正确。来自(我的重点):
NSPortName是应用程序应在其上运行的端口的名称
侦听服务请求。其值取决于服务请求的方式
提供程序应用程序已注册。在大多数情况下,这是
应用程序名称。对于Automator工作流,此属性将被忽略
被用作服务
我对文档的理解是,名称在NSPortName中的应用程序就是将用于处理服务请求的应用程序。如果应用程序的名称不是“Finder”(并且由于明显的原因,不应该是)然后你的应用程序将永远不会被服务调用。伙计,你完全正确,这就是问题所在,非常感谢!我用我的应用程序名更改了“Finder”,现在一切都好了:)dbg是一个短函数,可以登录到控制台和日志文件中。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[NSApp setServicesProvider: self];
}