заставить программу Objective C отвечать на applecript - PullRequest
2 голосов
/ 03 июня 2010

У меня есть программа Objective C, и я пытаюсь добавить возможность написания сценариев. Я прочитал документы и видел примеры SimpleScripting. Итак, у меня есть два вопроса:

1) Правильно ли я сказал, что каждая (нестандартная) команда будет нуждаться в своем собственном классе для ответа на эту команду? И этот класс, вероятно, будет иметь только один метод.

2) Как общепринятый способ общения этого класса с остальной частью программы? например, если я хочу, чтобы команда сообщила моему приложению сохранить, как объект сценария узнает об объекте, на который отправляются сообщения? Я могу видеть, как мой класс NSApplication устанавливает глобальное gApplication = this, а затем делает все через это, но это выглядит довольно глупо ...

1 Ответ

2 голосов
/ 11 декабря 2010

1) Правильно ли я сказал, что каждая (нестандартная) команда будет нуждаться в своем собственном классе для ответа на эту команду? И этот класс, вероятно, будет иметь только один метод.

Нет. Вы можете определить объект первого скрипта команды . В словаре сценариев используйте элемент <responds-to> в классе, чтобы объявить, что он принимает команду и какой метод вызывать. Метод должен занять NSScriptCommand*.

<class name="thing" code="tHNG" description="Something" plural="things">
    <cocoa class="Thing" />
    <responds-to name="do it">
        <cocoa method="doIt:" />
    </responds-to>
</class>
<command name="do it" code="You DOIT" description="Do it, whatever that happens to be.">
    <direct-parameter type="thing" description="A thing." />
    <result description="it's done" type="text" />
</command>

В каком-то заголовке:

@interface Thing (Scripting)
-(NSString*)doIt:(NSScriptCommand *)command;

При вызове в сценарии в качестве первого аргумента указывается объект соответствующего типа.

tell application "SomeApp"
    do it thing 1
end

2) Как общепринятый способ общения этого класса с остальной частью программы? например, если я хочу, чтобы команда сообщила моему приложению сохранить, как объект сценария узнает об объекте, на который отправляются сообщения? Я вижу, как мой класс NSApplication устанавливает глобальное gApplication = this, а затем делает все через это, но это выглядит довольно глупо ...

Команды сценария с первым глаголом (что потребует создания подкласса NSScriptCommand) должны получить переданные им объекты, с которыми нужно работать, путем вызова NSScriptCommand evaluatedArguments метода. Любые объекты, с которыми вам нужно работать, должны быть доступны из аргументов. Если нет, то проблема с вашим дизайном.

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