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

Posted

技术标签:

【中文标题】无法使用 Cocoa 中的服务在 Finder 的上下文菜单中添加项目【英文标题】:Unable to add item in Finder's contextual menu using services in Cocoa 【发布时间】:2012-02-24 11:45:53 【问题描述】:

每当我右键单击文件或文件夹时,我想在 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 代码来了解我做错了什么?

谢谢!

【问题讨论】:

你忘了包含实际的项目包 确实,对不起。我现在已经更新了 zip 文件。 您能否提供您的工作解决方案,因为旧链接不起作用。谢谢。 【参考方案1】:

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

【讨论】:

以上是关于无法使用 Cocoa 中的服务在 Finder 的上下文菜单中添加项目的主要内容,如果未能解决你的问题,请参考以下文章

仅用于文件夹的 Cocoa finder 菜单项

当用户从 finder 打开 Cocoa 应用程序时打开一个窗口,而应用程序都准备好打开

保存文件但隐藏文件扩展名 - 带有键值编码的 Cocoa

在 Cocoa 中搜索目录及其子目录中的所有目录/文件

如何在 Mac OS X 10.5 中处理从 Finder 中的多个文件拖放?

无法使用 finder 连接到 Lion 服务器,但可以使用 lion 服务器程序?