Sto tentando di aggiungere alcune funzionalità di script a un'app Cocoa che ho scritto. Ho creato un sdef (File di definizione dello script) per il mio progetto. Finora ho avuto successo ad accedere agli oggetti child (elementi) con AppleScript ma non riesco a capire come chiamare metodi (comandi).Definizione ed esecuzione di semplici comandi AppleScript in un'app Cocoa
Ecco il mio file sdef.
<suite name="mySuite" code="mSUI" description="My Application Suite">
<class name="application" code="capp" description="Top level scripting object.">
<cocoa class="NSApplication"/>
<!-- I can access these elements fine -->
<element description="Test children." type="child" access="r">
<cocoa key="myChildren"/>
</element>
<!-- Cannot seem to call this method :(-->
<responds-to command="testmethod">
<cocoa method="exposedMethod:"/>
</responds-to>
</class>
<class name="child" code="cHIL" description="A Child." plural="children">
<cocoa class="Child"/>
<property name="name" code="pnam" description="The child name." type="text" access="r">
<cocoa key="name"/>
</property>
</class>
<command name="testmethod" code="tEST" description="Execute the test method" />
</suite>
Qui sono i miei implementazioni di classe controller (questo è il delegato della mia applicazione)
MyController.h
#import <Cocoa/Cocoa.h>
@interface MyController : NSObject {
NSMutableArray* myChildren;
}
// Some Methods
@end
MyController + Scripting.m
#import "MyController+Scripting.h"
@implementation MyController (Scripting)
// This works when I'm accessing the myChildren
- (BOOL)application:(NSApplication*)sender delegateHandlesKey:(NSString*)key {
NSLog(@"Key = %@", key);
return ([key isEqualToString:@"myChildren"]);
}
// This does NOT work...
- (void)exposedMethod:(NSScriptCommand*)command {
NSLog(@"Invoked Test Script Method %@", [command description]);
}
@end
Infine, l'AppleScript che sto cercando è:
tell application "MyApplication"
testmethod
end tell
che risponde con "AppleScript Error - The variable testmethod is not defined."
Tutte le idee che cosa sto facendo male qui? Mi sento come se mi mancasse qualcosa di semplice ma il mio googling sembra non rivelarsi utile.
Forse mi manca qualcosa, ma si tratta di un'app Cocoa (OS X) o di un'app Cocoa Touch (iPhone)? Le app per iPhone non supportano AppleScript. – sbooth
Il richiedente ha chiarito che UIController era il nome (scarsamente scelto) di una classe di controller/delegato dell'applicazione personalizzata, quindi ho aggiornato il codice per rimuovere la confusione. –
Hai trovato una soluzione? Ho lo stesso problema .. – Dmitry