Cocoa Scripting:"其条款"无法访问某些属性

时间:2016-04-20 22:38:55

标签: applescript cocoa-scripting

我正在努力使我的应用程序可编写脚本。我和#34;"过滤条款。

我想让这项工作成功,但可以使用namecountry不能:

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与&#34;&#34;还有?显然,&#34;其中&#34;子句需要一个类型说明符,而不是属性名称,但我无法理解这一点。

我已经实施了indicesOfObjectsByEvaluatingObjectSpecifier:,但只会调用name,而不是country

1 个答案:

答案 0 :(得分:2)

哦,我错了。我的程序代码很好。这个问题是因为我还有一个名为country。因此AppleScript首先查看标识符的最外层范围,找到 country并尝试将其用于比较。如果错误消息包含单词“class”,则可能更容易检测到。

现在有两种解决方案:

  1. 重命名Sdef中的属性,使其不再与类名冲突,例如:到country name

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

    get every city whose country of it is "Germany"
    
  3. 确保如果在多个类中使用相同的属性名称,它们都使用相同的4-char类型代码也很重要。否则这个问题也会出现。