Cocoa 脚本:"whose clause" 无法访问某些属性

Cocoa Scripting: "whose clause" cannot access certain properties

我正在努力使我的应用程序可编写脚本。我与 "whose" 过滤器子句作斗争。

我想让这个工作,但是 name 可以使用,country 不能:

tell application "myapp"
    get every city whose name is "Berlin" -- works
    get every city whose country is "Germany" -- error -1700 (Can’t make country into type specifier)
end tell

sdef 的相关部分如下所示:

<class name="application" code="capp">
    <cocoa class="NSApplication"/>
    <element type="city">
        <cocoa key="allCities"/>
        <accessor style="index"/>
    </element>
    <class name="city" code="Citi" plural="cities">
        <cocoa class="ScriptableCity"/>
        <property name="name" code="pnam" type="text" access="r">
            <cocoa key="name"/>
        </property>
        <property name="country" code="Ctry" type="text" access="r">
            <cocoa key="country"/>
        </property>
    </class>

我必须怎么做才能让 country 也能与 "whose" 一起工作?显然,"whose" 子句需要类型说明符,而不是 属性 名称,但我无法理解这一点。

我已经实现了 indicesOfObjectsByEvaluatingObjectSpecifier:,但只有 name 需要,country 没有。

哦,我完全错了。我的程序代码没问题。这个问题是因为我还有一个名为 countryclass。因此 AppleScript 首先查看标识符的最外层范围,找到 class country 并尝试使用它为了比较。如果错误消息包含单词 "class",这可能会更容易检测到。

现在有两种解决方案:

  1. 重命名 Sdef 中的 属性,使其不再与 class 名称冲突,例如至 country name.

  2. 使用 of it 来更改标识符的查找范围,如下所示:

    get every city whose country of it is "Germany"
    

同样重要的是要确保如果在多个 class 中使用相同的 属性 名称,它们都使用相同的 4 字符类型代码。否则这个问题也会浮出水面。