【问题标题】:AppleScript Error -1700 when trying to access Apple Reminders尝试访问 Apple 提醒时出现 AppleScript 错误 -1700
【发布时间】:2021-06-15 10:37:30
【问题描述】:

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

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

      列表名称:   颜色

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

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

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

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

声明 1.(成功)

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

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

声明 2.(成功)

这会返回 {"Light Green", "Dark Green"}

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”、“Yellow”、“Orange”、“Blue”} 设为类型说明符。” 从 {"Red", "Yellow", "Orange", "Blue"} 到说明符的数字 -1700

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

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

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

【问题讨论】:

    标签: list applescript reminders


    【解决方案1】:

    这取决于你在和谁说话。

    当你说

    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 不是。列表中的包含不是提醒器所做的说明符。您正在发送此 Apple 事件:

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

    Apple 事件太奇怪了。如果不尝试,您无法知道应用程序将响应哪些说明符;碰巧提醒不喜欢这个,你无能为力。

    我会这样说

    set lstMyList to {"Red", "Yellow", "Orange", "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 事件来收集名称。

    【讨论】:

      猜你喜欢
      • 2016-04-19
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多