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

List 尝试访问Apple提醒时出现AppleScript错误-1700,list,applescript,reminders,List,Applescript,Reminders,我发现下面的AppleScript脚本错误,如果有人能解释原因,我将不胜感激 在Apple的提醒应用程序中,我创建了一个包含四个提醒项的简单列表,命名如下: 列表名称:颜色 提醒:红色、黄色、浅绿色、深绿色 在AppleScript中,我设置了以下变量: set lstMyList to {"Red", "Yellow", "Orange", "Blue"} 我不明白的是,前两种说法有效,但第三种说法无效 语句1.

我发现下面的AppleScript脚本错误,如果有人能解释原因,我将不胜感激

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

列表名称:颜色

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

在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.(成功)

这将返回{“浅绿色”、“深绿色”}

语句3.(失败)

这应该返回{“红色”、“黄色”},但会触发-1700错误

tell application "Reminders"
    return (name of every reminder in list "Colours") whose name is in lstMyList
end tell
弹出的完整错误是:

“提醒程序出错:无法将{“红色”、“黄色”、“橙色”、“蓝色”}转换为类型说明符。” 数字-1700从{“红色”、“黄色”、“橙色”、“蓝色”}到说明符

tell application "Reminders"
    return (name of every reminder in list "Colours") whose name is in lstMyList
end tell
我无法理解在第三种情况下发生了什么,因为第一个语句使用“is in lstMyList”没有任何问题,第二个语句使用“which”没有任何问题

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


如有任何解释和/或建议,将不胜感激。谢谢。

这是你在和谁说话的问题

当你说

return (name of reminder 1 of list "Colours") is in lstMyList
return (name of every reminder in list "Colours") whose name contains "Green"
return (name of every reminder in list "Colours") whose name is in lstMyList
发生了两件事

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

  • 其次,在内部(在这个脚本中),AppleScript语言获取结果字符串并检查列表中是否包含该字符串

  • 当你说

    return (name of reminder 1 of list "Colours") is in lstMyList
    
    return (name of every reminder in list "Colours") whose name contains "Green"
    
    return (name of every reminder in list "Colours") whose name is in lstMyList
    
    您正在向提醒发送一个苹果事件,这就是您所做的一切。没有任何东西可以保证提醒者愿意为您进行此计算,但碰巧它愿意。它计算出整个说明符并将结果返回给您

    同样地,当你说

    return (name of reminder 1 of list "Colours") is in lstMyList
    
    return (name of every reminder in list "Colours") whose name contains "Green"
    
    return (name of every reminder in list "Colours") whose name is in lstMyList
    
    您正在要求提醒者将此作为一个单一的苹果活动。您希望
    在lstMyList中
    说明符是提醒者愿意做的事情。但事实并非如此。AppleScript是,但提醒不是。列表中的包含并不是提醒所做的指定符。您正在发送此Apple事件:

    get «property pnam» 
        of every «class remi» 
        of «class list» "Colours" 
        whose {"Red", "Yellow", "Orange", "Blue"} contains «property pnam»
    
    那个苹果事件太奇怪了。如果不尝试,您就无法知道应用程序将响应哪些说明符;碰巧提醒不喜欢这个,你对此无能为力

    我这样做的方式是

    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
    
    我们现在已经收集了正确提醒的参考(在
    输出中),但是我们只发送了两个苹果事件,这既便宜又快捷。其余工作由AppleScript内部完成。当然,如果你只想要名字,而不是实际提醒的参考,你可以通过一个苹果活动来收集名字