私は、Cocoa Scripting に関する独自の非 ObjC フレームワークを作成しています (C、C++、Java、または私の場合は Xojo でスクリプト可能な Mac アプリを作成することを考えてください)。
ObjC クラスに実際のメソッドを追加する代わりに、オブジェクト ファーストのメソッド呼び出しをインターセプトできるようにしたいと考えています (フレームワークは、アプリ コードがどのメッセージを処理できるかを事前に認識できないため、できません。代わりに、スクリプト エンジンから受信したコマンド メッセージを受信して渡す必要があります)。
たとえば、プロパティのゲッターとセッターは、実装によって傍受できます。
-valueForUndefinedKey:
-setValue:forUndefinedKey:
NSScriptKeyValueCoding
プロトコルのすべてのメソッドと同様に。
NSCommandScript
これらの sdef 要素で指定されたメソッドに送信されたメッセージを傍受する同様の方法を探しています。
<responds-to command="reload">
<cocoa method="reloadList:"/>
</responds-to>
したがって、reloadList:
クラスメソッドに追加して実装する代わりに、そのような呼び出しをすべてキャッチする一般的な方法があるかどうか疑問に思います。
クラスメソッドが
+ (BOOL)resolveInstanceMethod:(SEL)sel
を求めて呼び出されreloadList:
ます。しかし、同じメソッドは他の多くの目的でも呼び出されます。そのため、そのようなすべての呼び出しをやみくもにインターセプトすることはしません。なぜなら、それらすべてをJava関数に転送して、必要かどうかを伝えるとパフォーマンスが大幅に低下するからです。たとえば、それを処理します。
さらに転送する前に、このセレクターが NSScriptCommand に関連していることを伝える何かがあることを願っています。