尝试访问 Apple 提醒时出现 AppleScript 错误 -1700

问题描述

我收到以下 AppleScript 脚本错误,如果有人能解释原因,我们将不胜感激。

在 Apple 的提醒应用程序中,我创建了一个包含四个提醒项的简单列表,命名如下:

列表名称 颜色

提醒: 红色、黄色、浅绿色、深绿色

在 AppleScript 中,我设置了这个变量:

set lstMyList to {"Red","Yellow","Orange","Blue"}

我不明白的是以下内容,前两个语句有效,但第三个语句无效。

声明 1.(成功)

这将返回 true,因为提醒 1(“Red”)的名称在 lstMyList 中

tell application "Reminders"
    return (name of reminder 1 of list "Colours") is in lstMyList
end tell

声明 2.(成功)

这会返回{"浅绿色"、"深绿色"}

tell application "Reminders"
    return (name of every reminder in list "Colours") whose name contains "Green"
end tell

陈述 3.(失败)

这应该返回 {"Red","Yellow"},但会触发 -1700 错误

tell application "Reminders"
    return (name of every reminder in list "Colours") whose name is in lstMyList
end tell

弹出的完整错误是:

“提醒出现错误:无法将 {"Red","Blue"} 设为类型说明符。” 数字 -1700 从 {"Red","Blue"} 到说明符

我无法理解在第三种情况下发生了什么,因为第一个语句使用“is in lstMyList”没有任何问题,而第二个语句使用“whose”没有任何问题。

我应该补充一点,我知道可以通过翻转代码来完全绕过错误,例如循环遍历 lstMyList 并检查提醒。但是,我试图避免这样的解决方案,因为这将需要重复发送 Apple 事件,这会导致运行时间显着增加,尤其是在列表项较多的情况下。

这里的任何解释和/或建议将不胜感激。谢谢。

解决方法

这取决于你在和谁说话。

当你说

return (name of reminder 1 of list "Colours") is in lstMyList

发生了两件事。

  1. 首先,发送一个 Apple 事件以获取列表“颜色”的提醒 1 的名称。这里的工作由提醒应用程序完成;说明符 name of reminder 1 of list "Colours" 是它可以理解的层次结构。

  2. 其次,内部(在此脚本中),AppleScript-the-language 获取结果字符串并检查列表中是否包含该字符串。

当你说

return (name of every reminder in list "Colours") whose name contains "Green"

您正在向 Reminders 发送 单个 Apple 事件,这就是您要做的全部。没有什么可以保证 Reminders 愿意为您做这个计算,但碰巧它愿意。它计算出整个说明符并将结果返回给您。

你说的也一样

return (name of every reminder in list "Colours") whose name is in lstMyList

您要求 Reminders 也将这个作为一个 Apple 活动来做。您希望 is in lstMyList 说明符是 Reminders 愿意做的事情。而事实并非如此。 AppleScript 是,但 Reminders 不是。列表中的包含不是 Reminders 所做的说明。您正在发送此 Apple 事件:

get «property pnam» 
    of every «class remi» 
    of «class list» "Colours" 
    whose {"Red","Yellow","Orange","Blue"} contains «property pnam»

那个苹果活动太奇怪了。如果不尝试,您就无法知道应用程序将响应哪些说明符;碰巧 Reminders 不喜欢这个,你也无能为力。

我这样做的方式是说

set lstMyList to {"Red","Blue"}
set output to {}
tell application "Reminders"
    tell list "Colours"
        set rems to (get every reminder)
        set names to (get name of every reminder)
    end tell
    repeat with i from 1 to count of names
        if item i of names is in lstMyList then
            set end of output to item i of rems
        end if
    end repeat
end tell

我们现在已经收集了对正确提醒的引用(在 output 中),但我们只发送了两个 Apple 事件,既便宜又快速。其余的工作由 AppleScript 在内部完成。当然,如果您只想要名称,而不是实际提醒的引用,您可以只使用 一个 Apple 事件来收集名称。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...