5

我正在将一些代码从 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]);
}];

我在另一个答案(将 AMWorkflow 与沙盒应用程序一起使用)中读到,NSUserAutomatorTask 的“executeWithInput:”提供的值被忽略。变量是否也有可能?

4

2 回答 2

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]);
}];

该工作流是一个简单的工作流,它已经有一个名为Storage的变量和一个从变量中获取其输入的选择列表。

在此处输入图像描述

运行代码时的工作流。

在此处输入图像描述

于 2013-06-17T21:45:55.343 回答
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

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

variableName 要为其设置值的变量的名称。

返回值 YES,如果找到 variableName 并且设置了它的值;否则否。

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

可用性 在 OS X v10.5 及更高版本中可用。在 AMWorkflow.h 中声明 valueForVariableWithName:返回具有指定名称的工作流变量的值。

- (id)valueForVariableWithName:(NSString *)variableName

参数 variableName 变量名。

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

可用性 在 OS X v10.5 及更高版本中可用。另请参阅 – setValue:forVariableWithName: 在 AMWorkflow.h 中声明 writeToURL:error

于 2013-03-06T15:54:33.557 回答