在NSUserAutomatorTask中设置变量

时间:2013-01-01 16:16:27

标签: objective-c macos automator

我正在将一些代码从AMWorkflow迁移到NSUserAutomatorTask,这样我最终可以沙箱化我的应用程序。我希望能够在AMWorkflow中设置工作流中现有变量的值:

AMWorkflow *task = [[AMWorkflow alloc] initWithContentsOfURL:scriptURL error:nil];
[task setValue:@"myValue" forVariableWithName:@"myVar"];

但是我似乎无法使用NSUserAutomatorTask获得类似的功能。 我能找到的唯一文档(类引用)表示将变量作为NSDictionary提供。

所以我正在尝试这样的事情:

NSUserAutomatorTask * task = [[NSUserAutomatorTask alloc] initWithURL:workflow error:nil];

task.variables = [NSDictionary dictionaryWithObject:@"myValue" forKey:@"myVar"];
[task executeWithInput:nil completionHandler:^(id result, NSError *error){
    if(error)
        NSLog(@"Error while executing workflow %@", [error localizedDescription]);
}];

我在另一个答案(Using AMWorkflow with sandboxed app)中读到,忽略了NSUserAutomatorTask的“executeWithInput:”提供的值。变量是否也可能?

2 个答案:

答案 0 :(得分:2)

当你第一次在10.8.3发布时我确实尝试了这个并且无法让它工作。我尝试了各种各样的事情,没有运气。

我现在正在使用10.8.4,它现在似乎无需对您的基本代码进行任何实际更改。

NSUserAutomatorTask * task = [[NSUserAutomatorTask alloc] initWithURL:[NSURL  URLWithString:@"file:///Users/UserName/Desktop/folderActionTest/test.workflow"] error:nil];

NSDictionary* taskDict = [NSDictionary dictionaryWithObject:@"Test item" forKey:@"Storage"];
task.variables=taskDict;
[task executeWithInput:nil completionHandler:^(id result, NSError *error){
    if(error)
        NSLog(@"Error while executing workflow %@", [error localizedDescription]);
}];

工作流程很简单,已经有一个名为存储的变量,以及一个从变量中获取输入的选择列表。

enter image description here

运行代码时的工作流程。

enter image description here

答案 1 :(得分:1)

这可能有所帮助 - 尚未尝试但寻找相同的答案

https://developer.apple.com/library/mac/#documentation/AppleApplications/Reference/AMWorkflow_class/Reference/Reference.html#//apple_ref/occ/cl/AMWorkflow

的setValue:forVariableWithName: 使用指定的名称设置工作流变量的值。

- (BOOL)setValue:(id)value forVariableWithName:(NSString *)variableName

参数 值 要为命名变量设置的值。

VARIABLENAME 用于设置值的变量名称。

返回值 如果找到variableName并设置其值,则为YES;否则没有。

讨论 如果找不到variableName指定的变量,则此方法不执行任何操作。

状况 适用于OS X v10.5及更高版本。 宣告进入 AMWorkflow.h valueForVariableWithName: 返回具有指定名称的工作流变量的值。

- (id)valueForVariableWithName:(NSString *)variableName

参数 变量名 变量名。

返回值 变量的值。如果未找到具有指定名称的变量,则返回nil。

状况 适用于OS X v10.5及更高版本。 也可以看看 - setValue:forVariableWithName: 宣告进入 AMWorkflow.h writeToURL:错误