Próbuję dodać niektóre funkcje skryptowe do aplikacji Cocoa, którą napisałem. Stworzyłem dla mojego projektu sdef (Plik definicji skryptu). Do tej pory udało mi się uzyskać dostęp do dzieci obiektów (elementów) za pomocą AppleScript, ale nie mogę na całe życie dowiedzieć się, jak wywoływać metody (polecenia).Definiowanie i wykonywanie prostych poleceń AppleScript w aplikacji Cocoa
Oto mój plik 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>
Oto moje implementacje klasy kontroler (to jest delegatem mojego wniosku)
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
Wreszcie AppleScript próbuję to:
tell application "MyApplication"
testmethod
end tell
który odpowiada "AppleScript Error - The variable testmethod is not defined."
pomysłów, co robię źle tutaj? Czuję, że brakuje mi czegoś prostego, ale mój Googling nie wydaje się być pomocny.
Być może brakuje mi czegoś, ale czy jest to aplikacja Cocoa (OS X) lub aplikacja Cocoa Touch (iPhone)? Aplikacje na iPhone'a nie obsługują AppleScript. – sbooth
Pytający wyjaśnił, że UIController był (źle wybraną) nazwą niestandardowej kontrolera aplikacji/klasy delegata, więc zaktualizowałem kod, aby usunąć zamieszanie. –
Czy znalazłeś rozwiązanie? Mam ten sam problem .. – Dmitry