Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSService未调用其NSMessage_Objective C_Macos_Cocoa_Finder - Fatal编程技术网

Objective c NSService未调用其NSMessage

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: %

我正在尝试添加一个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>
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];
}