Wie übergebe ich einen beliebigen AppleScript-Datensatz in einer skriptfähigen App an Cocoa?
Ich habe eine Cocoa-Anwendung mit einem AppleScript-Wörterbuch, das in einer .sdef-XML-Datei beschrieben ist. Alle in sdef definierten AppleScript-Klassen, -Befehle usw. funktionieren.
Mit Ausnahme meines Befehls "Formular senden". Der Befehl "submit form" ist mein einziger Befehl, der versucht, einen Parameter zu übergeben, der eine beliebige Hashtabelle von Informationen von AppleScript an Cocoa ist. Ich gehe davon aus, dass dies durch die Übergabe eines AppleScript erfolgen sollterecord
die automatisch in eine konvertiert wirdNSDictionary
auf der Kakaoseite.
tell application "Fluidium"
tell selected tab of browser window 1
submit form with name "foo" with values {bar:"baz"}
end tell
end tell
Der Parameter "with values" ist derrecord
->NSDictionary
Parameter, mit dem ich Probleme habe. Beachten Sie, dass die Schlüssel des Datensatzes / Wörterbuchs nicht im Voraus bekannt / definiert sein können. Sie sind beliebig.
Hier ist die Definition dieses Befehls in meinem SDEF-XML:
<command name="submit form" code="FuSSSbmt" description="...">
<direct-parameter type="specifier" optional="yes" description="..."/>
<parameter type="text" name="with name" code="Name" optional="yes" description="...">
<cocoa key="name"/>
</parameter>
<parameter type="record" name="with values" code="Vals" optional="yes" description="...">
<cocoa key="values"/>
</parameter>
</command>
Und ich habe ein "Tab" -Objekt, das auf diesen Befehl in der SDEF reagiert:
<class name="tab" code="fTab" description="A browser tab.">
...
<responds-to command="submit form">
<cocoa method="handleSubmitFormCommand:"/>
</responds-to>
und Kakao:
- (id)handleSubmitFormCommand:(NSScriptCommand *)cmd {
...
}
Das "tab" -Objekt reagiert korrekt auf alle anderen von mir definierten AppleScript-Befehle. Das Objekt "tab" reagiert auch auf den Befehl "submit form", wenn der optionale Parameter "with values" nicht gesendet wird. Ich weiß also, dass ich die Grundlagen richtig eingerichtet habe. Das einzige Problem scheint die Willkür zu seinrecord
->NSDictionary
param.
Wenn ich das AppleScript oben inAppleScript Editor.app
Ich bekomme diesen Fehler auf der Kakaoseite:
+[NSDictionary scriptingRecordWithDescriptor:]: unrecognized selector sent to class 0x7fff707c6048
und dieses auf der AppleScript Seite:
error "Fluidium got an error: selected tab of browser window 1 doesn’t understand the submit form message." number -1708 from selected tab of browser window 1
Kann mir jemand sagen, was ich vermisse? Als Referenz ist die gesamte Anwendung Open Source auf GitHub: