Что не так с этим Applescript?

Мое приложение имеет некоторые элементарные возможности распознавания текста. Существует один метод (receiveInstantMessage), который принимает один параметр (сообщение) и передает его в мое приложение, которое затем обрабатывает его.

Следующий яблочный скрипт:

tell application "MyApp"
    receivedInstantMessage "This is a message"
end tell

Работает отлично. Мое приложение представляет диалоговое окно, содержащее сообщение ("Это сообщение").

Я пытаюсь настроить его так, чтобы при отправке мгновенного сообщения в iChat он запускал яблочный скрипт, который отправит содержимое сообщения в мое приложение. Я сказал iChat запустить скрипт при получении сообщения, и я знаю, что эта часть работает. Скрипт, который я сейчас использую, не работает:

using terms from application "iChat"
    on message received theMessage from theBuddy for theChat
        tell application "MyApp"
            receivedInstantMessage theMessage                
        end tell
    end message received
end using terms from

Ничего не происходит, когда я получаю сообщение. Даже если я подставлю переменную сообщения (theMessage) из iChat и использую произвольную строку, она все равно ничего не делает.

Что я делаю неправильно. Я довольно новичок в applecript (будучи обычно РЕАЛЬНЫМ программистом).

[Обновление]: похоже, теперь работает. Простой перезапуск Mac исправил вещи. Очень странно...

1 ответ

Просто семантическая деталь: учтите, что сценарий отправляет сообщения в ваше приложение, а не получает их. Да, ваше приложение получает их, но терминология, которую вы выбрали "receiveInstantMessage", относится к вашему приложению, а не к сценарию.

Кроме того, считается, что в случае верблюда нет терминологии. Терминология AppleScript может (и часто должна) содержать пробелы. И если вы действительно хотите сделать это правильно, вы должны разделить терминологию на существительные и глаголы. (Где существительные - это правильно смоделированные объекты со свойствами, а глаголы - это команды для управления ими. В этом случае вам, вероятно, понадобится что-то вроде отправки сообщения "bla", где сообщение - это объект со свойствами, такими как отправитель, получатель, канал и т. Д. и send - это команда, которая принимает объект сообщения в качестве параметра - проверьте словарь Snak для довольно хорошей, но не идеальной реализации).

Извините, если это звучит анально. Я занимался написанием кода для яблок в течение многих лет, и хотя я действительно ценю это, когда разработчики добавляют поддержку applecript, я знаю, что говорю от имени всех сценаристов apple, когда говорю, что плохо построенные словари и неправильный выбор терминологии разочаровывают и раздражают, особенно когда приложение становится все более Созревает, и разработчик начинает говорить что-то вроде: "Я знаю, что интерфейс appleScript нуждается в полной переработке, но я не хочу ломать существующие скрипты!". ВСЕ яблочные сценаристы предпочитают, если интерфейс сценариев становится лучше, даже если он нарушает существующие сценарии. Итак: сделайте это неправильно сейчас, но будьте готовы существенно улучшить его позже.:)

Даже у Apple плохая терминология, например, в iTunes есть команды updatePodcast и updateAllPodcasts. Это просто неправильно, согласно их собственному техническому замечанию 2106 - обратите особое внимание на раздел о правилах именования. У них должен быть объект подкаста и команда обновления, чтобы вы могли также делать такие вещи, как "удалить каждый подкаст, имя которого содержит"Ann Coulter". (" Чьи "предложения - одна из самых крутых возможностей appleScript!)

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