Сценарии Какао: "чье предложение" не может получить доступ к определенным свойствам
Я работаю над созданием сценариев приложения. Я борюсь с "чьим" предложением фильтра.
Я хочу сделать эту работу, но пока 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
работать с "чьим" тоже? По-видимому, в предложении "which" требуется спецификатор типа, а не имя свойства, но я не могу понять этого.
Я реализовал indicesOfObjectsByEvaluatingObjectSpecifier:
, но это только требует name
, не для country
,
1 ответ
О, у меня все было не так. Мой программный код в порядке. Проблема вызвана тем, что у меня также есть класс с именем country
, Таким образом, AppleScript, глядя сначала на самый широкий охват идентификатора, находит класс country
и пытается использовать это для сравнения. Если бы в сообщении об ошибке было слово "класс", это было бы легче обнаружить, вероятно.
Теперь есть два решения:
Переименуйте свойство в Sdef, чтобы оно больше не конфликтовало с именем класса, например
country name
,использование
of it
чтобы изменить область поиска идентификатора, вот так:get every city whose country of it is "Germany"
Также важно убедиться, что если в нескольких классах используется одно и то же имя свойства, все они используют один и тот же код типа из 4 символов. В противном случае эта проблема также может возникнуть.