Сценарии свойства приложения Какао - PullRequest
3 голосов
/ 23 ноября 2011

У меня есть свойство моего приложения в моем словаре sdef, которое называется busy

<property name="busy" code="mybs" type="boolean" access="r" description="Is application busy?">
    <cocoa key="isBusy"/>
</property>

Также у меня есть категория NSApplication с isBusy accessor

- (BOOL)isBusy
{
    return NO;
}

Сценарии

tell application "MyApplication"
    properties
end tell

и

tell application "MyApplication"
    busy
end tell

работает нормально, а busy свойство имеет значение false, но скрипт

busy of application "MyApplication"

возвращает ошибку

error "MyApplication got an error: Can’t make |busy| into type specifier." number -1700 from |busy| to specifier

Где моя ошибка?

Ответы [ 2 ]

1 голос
/ 14 июля 2012

Поскольку busy является термином, специфичным для вашего приложения, ему должно предшествовать tell или using terms from, чтобы сделать термин известным в этот момент в коде. Любой из них будет работать:

tell application "MyApplication" to busy

tell application "MyApplication"
  busy
end tell

using terms from application "MyApplication"
  busy of application "MyApplication"
end using terms from

AppleScript анализирует слева направо и должен знать, каковы действительные термины, прежде чем он сможет их анализировать. Он не пропускает до конца busy of application "MyApplication", чтобы выяснить, как разобрать начало выражения. Если бы MyApplication имел термин busy of, это полностью изменило бы значение этого выражения и привело бы к парадоксу: of больше не было бы ключевым словом, используемым для создания спецификаторов объекта, что означает, что оно не получало бы терминологию из MyApplication, что означает будет ключевым словом of, а получит терминологию из приложения ... до бесконечности.

Вам может быть интересно, почему некоторые свойства приложения, такие как name, version и running, работают без введения терминологии приложения. Они работают, потому что они определены глобальной терминологией системы и не относятся к вашему приложению.

Обратите внимание, что 's притяжательный оператор не вводит терминологию, как tell, так что это тоже не работает (если только вы не предшествуете с tell или using terms from) :

application "MyApplication"'s busy
0 голосов
/ 24 января 2012

Это не будет работать, потому что это незаконное предложение Apple Script. Команда get, предложенная regulus6633, будет добавлена ​​автоматически, если вы ее опустите (см. Вкладку «События» в редакторе сценариев Apple). И каждой команде нужен исполнитель для ее выполнения. Подразумеваемая команда get не содержит в вашем ломаном предложении контейнера, необходимого для создания спецификатора типа "бла бла бла" t

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...