非C環境でCocoaのドラッグアンドドロップAPIを使用することに取り組んでいます。objc / runtime.h関数を使用する必要があるため、必要なメソッドをどこに挿入する必要があるかを正確に理解する必要があります。
現在、SDKのドキュメントには、NSViewまたはNSWindowオブジェクトで最初にregisterForDraggedTypesを呼び出すことが記載されています。さらに、これらのクラスは両方ともNSDraggingDestinationプロトコルのスタブを実装し、それらのスタブメソッドを上書きする必要があることをさらに説明します(少なくともdraggingEntered:とperformDragOperation:が必要です。残りはオプションです)。
ここまでは順調ですね。
ただし、これらのメソッドをウィンドウのコントローラー、つまりNSWindowControllerタイプのクラスに実装することもできることがわかりました。例として、Appleの「DemoMonkey」サンプルを使用してこれを行いました。ここでは、必要な呼び出しをDisplayController(NSWindowController)に実装し、「self.window」でregisterForDraggedTypesを呼び出しました。
これはどのように機能しますか?
つまり、この場合、registerForDraggedTypes呼び出しを受け取ったオブジェクトは、これらのドラッグコールバックを要求する必要があることを知っているので、コントローラーとどのように関連していますか?これがこのように機能することはどこに文書化されていますか?
これは、NSWindowControllerがNSResponderであるという事実と関係があるのだろうか。実際、NSDraggingDestinationの呼び出しはレスポンダーチェーンを介して実行されますか?(記録のために:NSResponderのサブクラスを作成し、コントローラークラスの代わりにそこにコールバックを実装し、そのインスタンスを作成して「self.window makeFirstResponder:」を呼び出しようとしましたが、それは実現しませんでしたウィンドウ上でデータをドラッグするときに呼び出されるコールバック。)
誰かがこの振る舞いを明確にし、この事実がどこに文書化されているかを説明できますか(または、これは単に文書化されていない振る舞いであり、したがって信頼されるべきではありませんか?)