macos - NSUserAutomatorTask 变量数组/列表值不能被 Automator 操作解析
问题描述
我正在使用NSUserAutomatorTask
从 macOS 应用程序启动 Automator 工作流程。
我通过variables
属性传递变量:
https ://developer.apple.com/documentation/foundation/nsuserautomatortask/1418099-variables
在 Automator 工作流程中,我将使用Get Value of Variable
操作来获取在 上设置的NSUserAutomatorTask
变量并将变量传递给后续 Automator 操作:
代码如下所示:(简化;我还检查了工作流中是否存在变量)
let workflow = try! NSUserAutomatorTask(url: url)
workflow.variables = [
"singleFilePath": "/image1.png",
"multipleFilePaths": ["/image1.png", "/image2.png"],
]
workflow.execute(withInput: nil)
我可以通过一个Ask for Confirmation
动作打印出警报中的变量值:
变量的String
值是一个简单的字符串:/image1.png
数组变量的[String]
值用括号括起来,每一项都被引用:
(
"/image1.png",
"/image2.png"
)
我现在运行如图所示的 Automator 工作流程,它首先获取变量的值,然后尝试打开这些 Finder 项目。
singleFilePath
var 有效。它被传递给 Open Finder Items 操作,并且该文件由默认应用程序打开。
以同样的方式通过multipleFilePaths
是行不通的。没有文件被打开。Automator 显示错误:
“打开查找器项目”操作未提供所需数据。
该动作是“Open Finder Item s ”,因此必须有某种方法可以将多个文件路径传递给该动作。
我的问题和解决方案按优先顺序排列如下:
为什么默认变量数组/列表格式在传递给后续操作时不起作用?有没有办法以兼容的格式传递或解析数组变量?
我们可以使用单个
Run AppleScript
操作将数组变量重新格式化为可以传递给后续 Automator 操作的格式吗?(我想继续链接 Automator 操作而不是运行纯 AppleScript)。
解决方案
Open Finder Items
如果在正常的非变量工作流中使用,操作可以打开一组项目。它似乎采用完全相同的格式。
作为对此进行测试的控件,而不是变量,我正在使用该Get Specified Finder Items
操作。
然后我使用一个View Results
动作来检查发送到的内容Open Finder Items
。
结果似乎与我解析变量时完全相同:
(
"/image1.png",
"/image2.png"
)
此工作流程确实正确运行最终操作并打开文件。
所以Open Finder Items
应该使用我在变量中设置的数据。我不确定为什么无法打开可变数据但手动选择的文件可以。
我为此问题打开了 DTS 票证并收到以下回复:
很遗憾,从事此工作的工程师已经确认,是的,这是一个错误,不,没有沙盒应用程序的解决方法。他们还指出,这不是以前版本的行为回归。
推荐阅读
- sql - 如何从 SQL 中的所有整数数组中获取特定数字
- html - 如何使用 Python 进行网页抓取来下载多个图像?到目前为止,我只设法使其与一张图片一起使用
- angular - 在 mat-table 的每列下添加一个过滤器
- concatenation - 在 OPENQUERY 中传递变量
- json - Odoo 控制器,在数据库中创建记录
- javascript - HTML | 选择标签 | AngularJS | Safari 和资源管理器中显示空白选项
- javascript - 与 React Component 实现斗争的初学者问题得到奇怪的“this”错误
- node.js - 在 circleci 中缓存 npm 依赖项
- php - 从 latin1 (ISO-8859-1) 到 UTF8 的 PHP 编码字符串
- stm32 - IAR仿真模式printf崩溃