Как передать произвольную Запись AppleScript на Какао в scriptable приложении?

У меня есть приложение Какао со словарем AppleScript, описанным в .sdef XML-файле. Все классы AppleScript, команды, и т.д. определенные в sdef, работают свойство.

За исключением мой "отправляют форму" команда. "Утверждают, что форма" команда является моей единственной командой, пытающейся передать параметр, который является произвольной хеш-таблицей информации от AppleScript до Какао. Я предполагаю, что это должно быть сделано путем передачи AppleScript record который будет автоматически преобразован в NSDictionary на стороне Какао.

tell application "Fluidium"
    tell selected tab of browser window 1
        submit form with name "foo" with values {bar:"baz"}
    end tell
end tell

"Со значениями" параметр record -> NSDictionary параметр я испытываю затруднения из-за. Обратите внимание, что ключи записи/словаря не могут знаться/определяться заранее. Они произвольны.

Вот определение этой команды в моем sdef XML:


    
    
        
    
    
        
    

И у меня есть объект "вкладки", который отвечает на эту команду в sdef:


    ...
    
        
    

и Какао:

- (id)handleSubmitFormCommand:(NSScriptCommand *)cmd {
    ...
}

Объект "вкладки" правильно отвечает на все другие команды AppleScript, которые я определил. Объект "вкладки" также отвечает на, "отправляют форму" команда, если я не отправляю дополнительное "со значениями" параметрический усилитель. Таким образом, я знаю, что у меня есть установка основ правильно. Единственная проблема, кажется, произвольное record->NSDictionary параметрический усилитель.

Когда я выполняю AppleScript выше в AppleScript Editor.app, Я получаю эту ошибку на стороне Какао:

+[NSDictionary scriptingRecordWithDescriptor:]: unrecognized selector sent to class 0x7fff707c6048

и этот на стороне AppleScript:

error "Fluidium got an error: selected tab of browser window 1 doesn’t understand the submit form message." number -1708 from selected tab of browser window 1

Кто-либо может сказать мне, что я пропускаю? Для ссылки целое приложение является открытым исходным кодом на GitHub:

http://github.com/itod/fluidium

5
задан Thomas Tempelmann 20 April 2016 в 16:30
поделиться

1 ответ

Правильно -- NSD словари и записи AppleScript кажутся смешанными, но на самом деле они не используют (в NSD словарях используются объектные ключи -- скажем, строки), где записи AppleScript используют четырехбуквенные символьные коды (благодаря наследию AppleEvent/Classic Mac OS).

Смотрите этот поток в списке рассылки Apple AppleScript Implementer

Итак, что вам на самом деле нужно сделать, в вашем случае, это распаковать имеющуюся у вас AppleScript-запись и перевести ее в NSD-словарь. Вы можете написать код самостоятельно, но это сложно и погружается глубоко в менеджер AE.

Однако, на самом деле, эта работа была проделана для вас в некотором подложке для appscript/appscript-objc (appscript - это библиотека для Python и Ruby и Objective-C, которая позволяет вам общаться с приложениями AppleScriptable без необходимости использования AppleScript. appscript-objc может быть использован там, где вы бы использовали Cocoa Scripting, но имеет меньше отстойных ограничений этой технологии)

Код доступен на sourceforge. Несколько недель назад я отправил автору патч, чтобы вы могли построить JUST основу подложки для appscript-objc, что в данном случае все, что вам нужно: все, что вам нужно сделать, это упаковать и распаковать записи Applescript/AppleEvent.

Для других гуглеров есть другой способ сделать это - не использовать appscript: ToxicAppleEvents. Там есть метод, который переводит словари в записи событий Apple.

3
ответ дан 13 December 2019 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: