2010-06-02 4 views
2

J'ai un programme Objective C, et j'essaie d'ajouter la scriptabilité. J'ai lu les documents et j'ai vu les exemples de SimpleScripting. donc, j'ai deux questions:faire un programme Objective C répondre à applescript

1) Ai-je raison de dire que chaque commande (non standard) va avoir besoin de sa propre classe pour répondre à cette commande? Et cette classe n'aura probablement qu'une seule méthode.

2) Quelle est la méthode acceptée pour que cette classe communique avec le reste du programme? si je veux que la commande dise à mon application de sauvegarder, par exemple, comment l'objet script est-il au courant de l'objet auquel envoyer les messages? Je peux voir ma classe NSApplication définir un gApplication global = this, et puis tout faire à travers cela, mais cela semble un peu kludgy ...

Répondre

2

1) Ai-je raison de dire que chaque (non-standard) commande va avoir besoin de sa propre classe pour répondre à cette commande? Et cette classe n'aura probablement qu'une seule méthode.

Non. Vous pouvez définir object first script commands. Dans le dictionnaire de script, utilisez l'élément <responds-to> dans une classe pour déclarer qu'il accepte la commande et la méthode à appeler. La méthode doit prendre un 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> 

Dans certains en-tête:

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

Lorsque appelé dans un script, un objet du type approprié est donné comme premier argument.

tell application "SomeApp" 
    do it thing 1 
end 

2) Quelle est la façon acceptée d'avoir cette classe de communiquer avec le reste du programme? si je veux que la commande dise à mon application de sauvegarder, par exemple, comment l'objet script est-il au courant de l'objet auquel envoyer les messages? Je peux voir faire ma classe NSApplication a établi un gApplication global = cela, puis tout par cela, mais qui semble un peu kludgy ...

Verb-first script commands (ce qui nécessitera NSScriptCommand le sous-classement) devraient se passaient les objets qu'ils besoin de travailler en appelant NSScriptCommand méthode evaluatedArguments. Tous les objets sur lesquels vous devez travailler doivent être accessibles depuis les arguments. Sinon, il y a un problème avec votre conception.