【发布时间】:2014-12-16 08:02:57
【问题描述】:
我正在尝试构建一个独立的系统服务(带有 .service 扩展名的应用程序,保存到 ~/Library/Services/)来替换 Mac OS X 中用户选择的文本。
我想用 Xcode 和 不 Automator 来构建它,因为我更习惯于 Objective-C 而不是 Applescript。
我在互联网上找到了几个例子,例如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;
}
【问题讨论】:
标签: objective-c xcode macos cocoa service