gpt4 book ai didi

objective-c - NSService 未调用其 NSMessage

转载 作者:行者123 更新时间:2023-12-03 16:37:42 24 4
gpt4 key购买 nike

我正在尝试添加 Finder 服务,一切看起来都很好,直到我希望该服务完成其工作。

这是我的 AppDelegate.m 中的方法:

-(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>

一切看起来都很好,服务显示在服务菜单中,但是当我单击它时,没有任何反应,没有日志或其他任何内容,就像根本没有调用它一样。

有人可以指出我出了什么问题吗,因为我开始很难拉头发:(

最佳答案

您正在设置服务提供商实例吗?像这样(来自:Providing a Service):

EncryptoClass* encryptor = [[EncryptoClass alloc] init];
[NSApp setServicesProvider:encryptor];

仅在应用程序委托(delegate)类中包含此方法是不够的。在标准应用程序设置中,将其放在应用程序委托(delegate)中可能就足够了:

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

此外,您还为 NSPortName 指定“Finder”。这可能是不正确的。来自 Services Properties (强调我的):

NSPortName is the name of the port on which the application should listen for service requests. Its value depends on how the service provider application is registered. In most cases, this is the application name. This property is ignored for Automator workflows being used as services.

我对文档的阅读是,名称为 NSPortName 的应用程序是将用于处理服务请求的应用程序。如果您的应用的名称不是“Finder”(由于显而易见的原因,它不应该),那么您的应用将永远不会被该服务调用。

关于objective-c - NSService 未调用其 NSMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14728671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com