我正在努力使我的应用程序可编写脚本。我和#34;"过滤条款。
我想让这项工作成功,但可以使用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
与&#34;&#34;还有?显然,&#34;其中&#34;子句需要一个类型说明符,而不是属性名称,但我无法理解这一点。
我已经实施了indicesOfObjectsByEvaluatingObjectSpecifier:
,但只会调用name
,而不是country
。
答案 0 :(得分:2)
哦,我错了。我的程序代码很好。这个问题是因为我还有一个名为country
的类。因此AppleScript首先查看标识符的最外层范围,找到 类 country
并尝试将其用于比较。如果错误消息包含单词“class”,则可能更容易检测到。
现在有两种解决方案:
重命名Sdef中的属性,使其不再与类名冲突,例如:到country name
。
使用of it
来更改标识符查找的范围,如下所示:
get every city whose country of it is "Germany"
确保如果在多个类中使用相同的属性名称,它们都使用相同的4-char类型代码也很重要。否则这个问题也会出现。