Cocoa Application, AppleEvents und AppleScript

  • Ersteller fedderle
  • Erstellt am

fedderle

Gast
HallO!

Habe eine Cocoa Application die AppleEvents die von AppleScript aus verschickt werden empfangen können soll!

Nur irgendwie blick ich nicht genau was ich da machen muss, damit das funktioniert!

Also! Bisher hab ich dies hier gemacht:

- (void) applicationDidFinishLaunching: (NSNotification *) notification
{
NSAppleEventManager *eventManager = [NSAppleEventManager sharedAppleEventManager];
[eventManager setEventHandler:self andSelector:mad:selector(test:zwei:) forEventClass: 'WAS MUSS HIER HIN????' andEventID: 'WAS MUSS HIER HIN???''];
}


und wie sieht denn dann mein AppleScript Befehl entsprechend aus?????

Oder hab ich noch was vergessen was ich noch unbedingtz machen muss?
oder ist das generell eh die falsche Methode??????


gruß
fedderle????
 

fedderle

Gast
ja den hab ich schon gelesen!

Aber das verwirrt mich irgendwie alles.
Weil in diesem Artikel werden ja AppleEvents von mir an sich nicht benutzt! Also die werden da ja vom System selbst verwaltet da.

bei dem Oben setz ich ja selbst den ahndler implizit!

Was ist denn nun besser?
Dazu muss ich sagen, dass ich den Artikel da durxchgearbeitet habe! Meinem Programm angepasst habe, aber nichts geht!

Ich hab keine Ahnung was ich falsch mache!

Also welche der beiden methoden nun verwednet wird ist mir egal, hauptsache ich wuerde das irgendwie zum alufen bekommen!

Zu dem! Ja die ID's das sind doch irgendseklche von mir selbst gewählten 4 stelligen Codes. also beispeil 'BSPL'!

Wenn ich das nun richtig verstehe, wird nun dann so ein Händler registriert der events abfängt, die diese Codes beinhalten. Nur wie erzeug ich denn nun in Applescript ein passendes Event, weil ich hab ja nirgends einen AppleScript befehl definiert! Wo muss ich dass denn machen und wichtiger Wie????????


gruß fedderle!
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Erstens: In einem früheren Leben hab ich mal Schriftsatz gemacht. Dein Umgang mit Satzzeichen tut mir weh.

Zweitens: Ich bin mir nicht so ganz sicher, was Du vor hast. Es ist nicht unbedingt notwendig, einen eigenen EventHandler zu installieren, Cocoa bringt da ja schon etwas mit.

Den AppleScript Befehl zu den Codes legst Du in einer sdef Datei fest:
http://developer.apple.com/document....html#//apple_ref/doc/uid/TP40001979-BBCBCIJE

Wenn Du die dann Deiner Applikation richtig hinzugefügt hast, kannst Du mir dem AppleScript Editor dann Scripts schicken.

Alex
 

fedderle

Gast
zu erstens:

Sorry! Ich hab ein wenig schnell getippt und da nicht drauf geachtet! ;)

zu zweitens:
Also! Wie schon gesagt ich bin dem Tutorial eigentlich schon gefolgt und habe das auch alles schon angelegt!
Meine sdef Datei:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd">
<dictionary title="">
<suite name="IClient Scripting" code="INVC"
description="Commands and classes for IClient Scripting">
<classes>
<class name="application" code="capp" description=""
inherits="NSCoreSuite.NSApplication">
<cocoa class="NSApplication"/>
<properties>
<property name="my text" code="INVC" type="string"
description="The text that gets spun into a circle" />
<cocoa method="circleText"/>
</properties>
</class>
</classes>
</suite>
</dictionary>

In meiner Klasse (Controller) die auch das delegate von "Files Owner" ist, habe ich folgendes reingeschrieben:

- (BOOL)application:(NSApplication *)sender
delegateHandlesKey:(NSString *)key
{
NSLog(@"ask %@", key);
if ([key isEqual:mad:"circleText"]) {
return YES;
} else {
return NO;
}
}


- (NSString *)circleText
{
NSLog(@"AUFRUF1");
return @"HANS";
}

- (void)setCircleText:(NSString *)text
{
NSLog(@"AUFRUF2");
}


Habe auch das nib File angepasst.

aber bekomme dann beim Übersetzen des AppleScripts:

tell Application "myApplication"
set circle text to "test"
end tell
diesen Fehler hier:

text kann nicht diesem "Identifier" folgen!

Und ich habe keine Ahnung woran das liegt!
Wenn ich so vorgehe habe ich natuerlich die Funktion "setEventHandler:..." nicht verwendet!


gruß fedderle!
 

fedderle

Gast
Hat sich soeben erledigt!
Habe endlich eine Methode gefunden wie ich das ganze umsetzen kann.

NSScriptCommand Klasse ableiten und -(id) performDefaultImplementation überschreiben. dann gehts!

edit:
Eine Frage haben ich aber noch:

Und zwar möchte ich nun Parameter übergeben und habe deshalb mein sdef-File folgendermaßen angepasst.

...
<command name="test" code="INVCTEST" description="das ist ein test">
<cocoa class="ScriptingTest" />
<direct-parameter description="mein Parameter">
<type type="string" list="no"/>
<direct-parameter>
</command>
...
Wenn ich das nun richtig verstanden habe, müsste ja mein AppleScript dann wie folgt aussehen:

tell application "my application" test "Ein String"

So weit funktioniert das auch! Aber wenn ich dann in meinem NSScriptCommand-Objekt dann [self directParameter] aufrufe, ist dieser immer nill.

habe Ich noch irgendwas vergessen??

gruß
fedderle
 
Zuletzt bearbeitet von einem Moderator: