Что не так с этим Applescript? - PullRequest
0 голосов
/ 01 февраля 2011

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

Следующий код appleScript:

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 (обычно являюсь REALbasic-кодером).

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

1 Ответ

1 голос
/ 25 мая 2011

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

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

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

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

...