これは、Cocoa Scriptingを使ってスクリプト化可能なアプリケーションを実装することについての質問です。私のスクリプト可能なアプリケーションで自分自身のオブジェクトを提供する
私のアプリのスクリプト可能なapplication
オブジェクトには、カスタムクラスの要素が含まれています。これをflower
とします。
.sdefファイルでは、flower
のCocoaクラスはScriptableFlower
と指定されています。 AppleScriptでは
、1は今書くことができます:-(NSArray*)flowers
:
tell app "myapp"
get flowers
end tell
を私のコードは、花を取得するためのアクセサ機能を提供します。
は今、私は1つを書くことができるように、新しい花を追加する方法を実装したい:
tell app "myapp"
make new flower
end tell
このデフォルトの動作を、NSCreateCommand
を使用して「作る」のデフォルトのコアスイートハンドラで、あります次のように:
スクリプトエンジンは、私のflowers
関数を呼び出して、花の現在の配列を取得し、その後、クラスScriptableFlower
の新しいココアオブジェクトをインスタンス化して、私の元のオブジェクトを含む配列に加えて、新たに作成したものでsetFlowers:(NSArray*)
を呼び出します。
ただし、これは私のアプリケーションには適していません。私は、スクリプトエンジンが私のスクリプト可能なクラスのオブジェクトを自由に作成することを許可できません。
代わりに、私はそれらをインスタンス化する必要があります。
半分の解決策は、デフォルトの-(id)init
メソッドを実装して、それが私に呼び出されたかどうかを検出することです。そうでない場合は、余分な手順を取ることができます。しかし、それはきれいではありません。むしろスクリプトエンジンが新しいオブジェクトを作成するのではなく、オブジェクトを「どこかで」用意しておくことで、自分自身でオブジェクトを作成することができます。
私は新しいスクリプト可能オブジェクトを作成したいと思うときはいつでも、私に電話をかけるいくつかの手段がCocoa Scriptingにありますか?
更新
明確にする:Cocoa Scripting docsは1つが全体にNSArrayを取る必要がないように、1は、特殊な挿入ハンドラ(insertObject:in<Key>AtIndex:
)を実装することができることを説明し、それはまだ作成するために、スクリプトエンジンにつながりますオブジェクト。私は代わりに、オブジェクトを作成するように頼まれる必要があります。