我正在将一些代码从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:”提供的值。变量是否也可能?
答案 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]);
}];
工作流程很简单,已经有一个名为存储的变量,以及一个从变量中获取输入的选择列表。
运行代码时的工作流程。
答案 1 :(得分:1)
这可能有所帮助 - 尚未尝试但寻找相同的答案
的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:错误