Сценарии Какао: "чье предложение" не может получить доступ к определенным свойствам

Я работаю над созданием сценариев приложения. Я борюсь с "чьим" предложением фильтра.

Я хочу сделать эту работу, но пока 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 и пытается использовать это для сравнения. Если бы в сообщении об ошибке было слово "класс", это было бы легче обнаружить, вероятно.

Теперь есть два решения:

  1. Переименуйте свойство в Sdef, чтобы оно больше не конфликтовало с именем класса, например country name,

  2. использование of it чтобы изменить область поиска идентификатора, вот так:

    get every city whose country of it is "Germany"
    

Также важно убедиться, что если в нескольких классах используется одно и то же имя свойства, все они используют один и тот же код типа из 4 символов. В противном случае эта проблема также может возникнуть.

Другие вопросы по тегам