【问题标题】:Text Replace Service with Xcode - Not replacing selected text使用 Xcode 替换文本服务 - 不替换选定的文本
【发布时间】:2014-12-16 08:02:57
【问题描述】:

我正在尝试构建一个独立的系统服务(带有 .service 扩展名的应用程序,保存到 ~/Library/Services/)来替换 Mac OS X 中用户选择的文本。

我想用 Xcode 和 Automator 来构建它,因为我更习惯于 Objective-C 而不是 Applescript。

我在互联网上找到了几个例子,例如thisApple's documentation。我得到了正确配置和构建的 Xcode 项目,没有问题。但是,当我安装我的服务并尝试使用它时,什么也没有发生。

服务方法本身被执行:我在其方法主体中放置了显示 NSAlert 的代码,它显示了。但是,所选文本不会被替换。

知道可能缺少什么吗?这是实现服务的方法:

- (void) fixPath:(NSPasteboard*) pboard
        userData:(NSString*) userData
           error:(NSString**) error
{
    // Make sure the pasteboard contains a string.
    if (![pboard canReadObjectForClasses:@[[NSString class]] options:@{}])
    {
        *error = NSLocalizedString(@"Error: the pasteboard doesn't contain a string.", nil);
        return;
    }

    NSString* pasteboardString = [pboard stringForType:NSPasteboardTypeString];


    //NSAlert* alert = [[NSAlert alloc] init];
    //[alert setMessageText:@"WORKING!"];
    //[alert runModal];

    // ^ This alert is displayed when selecting the service in the context menu


    pasteboardString = @"NEW TEXT";

    NSArray* types = [NSArray arrayWithObject:NSStringPboardType];

    [pboard clearContents];
    [pboard declareTypes:types owner:nil];

    // Set new text:
    [pboard writeObjects:[NSArray arrayWithObject:pasteboardString]];

    // Alternatively:
    [pboard setString:pasteboardString forType:NSStringPboardType];

    // (neither works)

    return;
}

【问题讨论】:

    标签: objective-c xcode macos cocoa service


    【解决方案1】:

    仔细阅读Apple's documentation后,我找到了答案:我的服务应用的plist文件在Services部分下少了一个key:

    <key>NSReturnTypes</key>
    <array>
        <string>NSStringPboardType</string>
    </array>
    

    我只有相反的 NSSendTypes 键,它允许您将数据从客户端应用程序发送到服务。需要这个来将修改后的文本发回(在另一个方向)。

    这很奇怪,因为 Apple 的文档似乎暗示从 10.6 (Snow Leopard) 起不再需要指定这两个。

    【讨论】:

    • 像往常一样,我会等几天再接受我自己的答案,以防有人提供有关该主题的有用信息。
    【解决方案2】:

    对于(希望)有用的控制台喷射,终端类型:

    defaults write -g ViewBridgeLogging -bool YES

    注意:对服务和扩展也有用。

    【讨论】:

      猜你喜欢
      • 2012-12-21
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      相关资源
      最近更新 更多