Открытие файла с помощью ScriptingBridge - PullRequest
1 голос
/ 20 января 2011

У меня есть AppleScript, который я пытаюсь преобразовать в ScriptingBridge. Поскольку мое приложение является приложением C ++ / Obj-C, ScriptingBridge намного проще в использовании и немного быстрее (не говоря уже о том, что я ненавижу динамическое создание AppleScripts).

AppleScript отправляет сообщение в Photoshop, чтобы открыть файл. Параметр файла отправляется как alias, но ScriptingBridge импортирует параметр как id. Я не знаю, какой объект Obj-C я должен передать?

Я пытался передать NSURL и NSString (вероятно, неправильно :-P), но безрезультатно. Любые предложения о том, что я должен передать псевдоним файла?

Ответы [ 3 ]

1 голос
/ 21 января 2011

Если ваша программа такова, что открытие документа Photoshop может быть выполнено за пределами вашего скрипта AppleScript / кода скриптового моста, Cocoa предоставляет метод для открытия файлов в определенном приложении:

[[NSWorkspace sharedWorkspace] openFile:@"/Users/bavarious/Desktop/test.psd" withApplication:@"Adobe Photoshop CS4"];

или, если выЕсли вы хотите использовать приложение по умолчанию, которое обрабатывает этот тип файла, вы можете полностью удалить имя приложения:

[[NSWorkspace sharedWorkspace] openFile:@"/Users/bavarious/Desktop/test.psd"];
1 голос
/ 21 января 2011

Краткий ответ: вы не можете открывать документы в Photoshop с помощью Scripting Bridge.

Документы Apple действительно объясняют это как есть. Все классы должны иметь контейнер, который является изменяемым массивом, к которому они должны быть добавлены, прежде чем с ними можно будет работать, как показано в сгенерированном заголовке ...

@interface photoshopCS4Application : SBApplication

- (SBElementArray *) documents;
- (SBElementArray *) fonts;
- (SBElementArray *) notifiers;

... и это полный список доступных нам контейнеров верхнего уровня. Команда open требует, чтобы a photoshopCS4OpenOptions были сгенерированы и заполнены. Поскольку API не предоставляет массив для хранения вновь созданного объекта photoshopCS4OpenOptions, мы не можем использовать вновь созданный объект photoshopCS4OpenOptions. Поэтому мы не можем создать целевой документ и по расширениям не можем использовать команду open в Scripting Bridge. То же самое можно сказать обо всех командах, которые требуют какой-то опции объекта.

Единственный обходной путь, который я выбрал, - это открыть документ с собственным Applescript, вызванным из Cocoa, или objc-appscript, а затем проанализировать массив documents, чтобы найти только что открытый. Он не идеален, но в то же время не является Scripting Bridge, поскольку требует, чтобы разработчики приложений писали свои API-интерфейсы сценариев очень специфическим способом, который не является родным для инфраструктуры OSA.

0 голосов
/ 21 января 2011

Рассмотрим Appscript.http://appscript.sourceforge.net/

Вот код, использующий это:

APApplication * adobePhotoshopCs4 = [APApplication applicationWithName: @ "Adobe Photoshop CS4"];id result = [[adobePhotoshopCs4 open_] send];

(Обратите внимание, я не программист Какао - я в основном использую Appscript с Python, но Appscript поставляется с ASTranslate, который переводит Applescript в Python, Ruby или Obj-Cи это результат - но я обнаружил, что в прошлом иногда возникали тонкие ошибки с переводчиком)

...