アプリをスクリプト可能にしたいのですが、いくつかの問題が発生しています。アプリをスクリプト可能にする経験があまりないので、助けてくれることを願っています。
アプリはドキュメントベースではなく、AppleScript からアクセスしたい同じクラスのグローバルな名前付きオブジェクトがいくつかあります。たとえば、「動物」、「植物」、「車」など、それぞれに名前が付けられたいくつかのカタログが必要だとします。アプリケーション クラスに (AppleScript で) いくつかのプロパティを追加することができました。それぞれがカタログの 1 つを表しています。
<class name="application" description="My application." code="capp" inherits="application">
<cocoa class="NSApplication"/>
<property name="animals catalogue" code="acat" description="…" type="catalogue" access="r">
<cocoa key="animalsCatalogue"/>
</property>
<property name="cars catalogue" code="ccat" description="…" type="catalogue" access="r">
<cocoa key="carsCatalogue"/>
</property>
<property name="plants catalogue" code="pcat" description="…" type="catalogue" access="r">
<cocoa key="plantsCatalogue"/>
</property>
</class>
これらの変数のいずれかを正常に取得できます。たとえば、
tell application "MyApp"
set c to get animals catalogue
end tell
本当にカタログ変数 ( «class ����» "Animals" of application "MyApp"
) を取得します。
残念ながら、カタログからプロパティを取得する場合は注意が必要です。たとえば、「空」です。カタログの定義は次のとおりです。
<class name="catalogue" code="ctlg" description="...">
<cocoa class="XYCatalogue"/>
<property name="empty" code="empt" description="Is the catalogue empty?" type="boolean" access="r">
<cocoa key="isEmpty"/>
</property>
</class>
ここでの問題は、この AppleScript を実行するときです。
tell application "MyApp"
set c to get animals catalogue
get empty of c
end tell
エラーが発生します。MyApp got an error: Can’t make «class ����» "Animals" into type specifier.
実装に関しては、NSApplication をサブクラス化し (そして、Info.plist でメイン クラスを指定しました)、いくつかのメソッドを実装し、それらの特定のカタログを返します。このXYCatalogue
クラスは、次の-objectSpecifier
方法でメソッドを実装します。
return [[[NSNameSpecifier alloc] initWithContainerClassDescription:
[NSScriptClassDescription classDescriptionForClass:[NSApp class]]
containerSpecifier:nil
key:@"allCatalogues"
name:[self name]] autorelease];
NSApplication サブクラスは、-allCatalogues
すべてのカタログを返すメソッドを実装します。と を使ってみましNSUniqueIDSpecifier
たがNSPropertySpecifier
、すべて無駄でした。はい、NSApplication サブクラスはメソッド-valueWithName:inPropertyWithKey:
と-valueInAllCataloguesWithName:
メソッドの両方を実装し、どちらも呼び出されません (両方にブレークポイントがあります)。
Apple のガイドを何度か読み返しましたが、まだ問題がどこにあるのかわからず、数日間この問題に取り組んでいます。正しい方向への微調整に最も感謝します。ありがとう!