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
没有。
哦,我完全错了。我的程序代码没问题。这个问题是因为我还有一个名为 country
的 class。因此 AppleScript 首先查看标识符的最外层范围,找到 class country
并尝试使用它为了比较。如果错误消息包含单词 "class",这可能会更容易检测到。
现在有两种解决方案:
重命名 Sdef 中的 属性,使其不再与 class 名称冲突,例如至 country name
.
使用 of it
来更改标识符的查找范围,如下所示:
get every city whose country of it is "Germany"
同样重要的是要确保如果在多个 class 中使用相同的 属性 名称,它们都使用相同的 4 字符类型代码。否则这个问题也会浮出水面。
我正在努力使我的应用程序可编写脚本。我与 "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
没有。
哦,我完全错了。我的程序代码没问题。这个问题是因为我还有一个名为 country
的 class。因此 AppleScript 首先查看标识符的最外层范围,找到 class country
并尝试使用它为了比较。如果错误消息包含单词 "class",这可能会更容易检测到。
现在有两种解决方案:
重命名 Sdef 中的 属性,使其不再与 class 名称冲突,例如至
country name
.使用
of it
来更改标识符的查找范围,如下所示:get every city whose country of it is "Germany"
同样重要的是要确保如果在多个 class 中使用相同的 属性 名称,它们都使用相同的 4 字符类型代码。否则这个问题也会浮出水面。