Cocoa + Automator:生成文本文件无效的服务

时间:2013-08-27 09:10:53

标签: objective-c cocoa osx-mountain-lion automator

我正在尝试使用cocoa创建一个automator服务,它将在同一路径上创建一个文本文件,其中包含所选文件的名称,我在下面编写代码:

- (id)runWithInput:(id)input fromAction:(AMAction *)anAction error:(NSDictionary **)errorInfo
{
    // Add your code here, returning the data to be passed to the next action.

    NSArray *fileURLs = (NSArray *)input;

    size_t count = [fileURLs count];

    dispatch_apply(count, dispatch_get_global_queue(0, 0), ^(size_t i) {
        NSURL *fileURL = [fileURLs objectAtIndex:i];

        NSData *data = [@"some crude text ;)" dataUsingEncoding:NSUTF8StringEncoding]; 

        //changing extension of file
        NSString *filePathWithoutExtension = [[fileURL path] stringByDeletingPathExtension];
        NSString *filePathWithNewExtension = [[NSString alloc] initWithFormat:@"%@.%@",filePathWithoutExtension,@"txt"];

        [data writeToFile:filePathWithNewExtension atomically:NO];

    });

    // no need to return anything
    return nil;
}

我在info.plist文件中添加了以下值:

  • AMAccepts:Types:Item 0:com.apple.cocoa.url
  • AMCategory:AMCategoryPhotos

我将动作导入自动设定器,并将其添加到默认服务模板。

输入模板中选择的选项为:

  1. 服务接收选定的:网址
  2. in:Finder
  3. 输入为:仅限网址
  4. 我的问题是当我尝试右键单击finder中的文件时,创建的服务没有出现。

    任何人都可以建议我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

有时候我的服务没有出现,因为我有很多这样的问题。尝试进入以下窗口并通过取消选中其复选框来禁用其他一些服务:

系统偏好设置>键盘>服务

如果您有任何要删除(或存档)的服务,则可以执行以下操作:

  1. 右键单击服务名称
  2. 选择“在Finder中显示”
  3. 这将带你到〜/ Library / Services /
  4. 您可以删除服务或将其移动到某处以便安全保存。

    --- ---编辑

    我一直在看这个。也许,在Automator中将服务工作流的输入指定为“文件和文件夹>图像文件”,而不是“文本> URL”。或者,可能会有效。

    您必须在操作中调整Objective-C代码以使用路径名而不是使用URL,但这是一个想法。

    如果我的评论都不起作用,您可以发送电子邮件至:kaydell@yahoo.com我有兴趣了解有关Automator的更多信息。

答案 1 :(得分:0)

我更改了这些选项后服务工作了:

  1. 服务接收选定的:网址
  2. in:Finder
  3. 输入为:仅限网址
  4. 到这些:

    1. 服务接收选定的:图像文件
    2. in:Finder
    3. 输入为:(已禁用)
    4. : - )