gpt4 book ai didi

objective-c - 使用 Xcode 的文本替换服务 - 不替换选定的文本

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

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

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

我在互联网上找到了几个例子,例如this还有Apple'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;
}

最佳答案

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

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

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

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

关于objective-c - 使用 Xcode 的文本替换服务 - 不替换选定的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27264360/

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