macos - 无法使用 Cocoa 中的服务在 Finder 的上下文菜单中添加项目

标签 macos cocoa service contextmenu finder


每当我右键单击文件或文件夹时,我想在 Finder 的上下文菜单中添加一个项目,并且该菜单链接到我的 Cocoa 应用程序的方法。
我正在遵循 CocoaDev 的示例和 Apple 的文档,但无法显示该服务。
这是我的 .h

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject <NSApplicationDelegate,NSObject>

@property (assign) IBOutlet NSWindow *window;
-(void)IClicked:(NSPasteboard *)pboard 
             userData:(NSString *)data
                error:(NSString **)error;

@end

.m

#import "AppDelegate.h"

@implementation AppDelegate
@synthesize window = _window;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [NSApp setServicesProvider:self];
}

- (void)IClicked:(NSPasteboard *)pboard userData:(NSString *)data error:(NSString **)error
{
    NSLog(@"I clicked");
}

@end

以及我的 Application-plist.info 的摘录:

<key>NSServices</key>
<array>
    <dict>
        <key>NSKeyEquivalent</key>
        <dict>
            <key>default</key>
            <string>E</string>
        </dict>
        <key>NSMenuItem</key>
        <dict>
            <key>default</key>
            <string>My Application</string>
        </dict>
        <key>NSMessage</key>
        <string>IClicked</string>
        <key>NSPortName</key>
        <string>TestService</string>
        <key>NSSendFileTypes</key>
        <array>
            <string>public.item</string>
        </array>
        <key>NSSendTypes</key>
        <array>
            <string>NSPasteboardTypeString</string>
        </array>
        <key>NSRequiredContext</key>
        <dict>
            <key>NSServiceCategory</key>
            <string>public.item</string>
        </dict>
        <key>NSReturnTypes</key>
        <array>
            <string>NSPasteboardTypeString</string>
        </array>
    </dict>
</array>
</dict>

我已将代码上传到http://www.petits-suisses.ch/TestService.zip .

我做错了什么,或者我可以下载任何可用的 Cocoa 代码来了解我做错了什么吗?

谢谢!

最佳答案

发现问题:
1.我确实必须将我的应用程序至少存储一次到Applications文件夹中(使用Xcode编译时默认情况下不会这样做)
2. 应在 [NSApp setServicesProvider:self]; 命令后添加 NSUpdateDynamicServices();
3. 启动应用程序后等待大约 10 秒,填充 Finder 的服务菜单。

关于macos - 无法使用 Cocoa 中的服务在 Finder 的上下文菜单中添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9430216/

相关文章:

xcode - 如何从 xcode 项目中清除个人信息?

cocoa - NSTreeController 基于 transient isRoot 异常获取谓词

c# - Cocoa (MonoMac) & WinForms (or WPF) frontend with common c# backend

cocoa - 为什么编译器看不到@synthesize和@dynamic?

Android:OTG 存储通知与 radio c 冲突

service - 命中 HeadlessService 的端点 - Kubernetes

python - PyML 构建时出错

macos - 在许多 Mac API 中,PB 前缀代表什么?

ios - 如何从pid获取当前进程和其他进程堆的起始地址?

java - 从另一个 Axis 服务获取已部署的 Axis 服务列表