Cocoaについて勉強したことのメモ。
NSTableViewのドラッグ&ドロップ処理は、dataSourceにtableView:acceptDrop:row:dropOperation:などのメソッドで記述できる。NSArrayControllerにバインディングしている場合、NSArrayControllerのサブクラスを作ってさっきのメソッドを実装しつつ、NSTableViewのdataSourceにそいつを設定する(このdataSourceの指定とバインディングは別)。
サブクラスはInterface BuilderのClassesペインで作れるけど、そのまま「Instanciate...」メニューでインスタンスを作ろうとしても、メニューが無効化されている。インスタンスを作るには、まずパレットからNSArrayControllerのインスタンスを作っておいて、そのインスペクタの「Custom Class」からサブクラスの名前を指定する。これについてはFAQにも出ている。
NSTableViewをドラッグ&ドロップの対象にするには registerForDraggedTypes で登録しないといけないので、このNSArrayControllerのawakeFromNibあたりで登録しておく。
NSTableViewのドラッグ&ドロップに対応したNSArrayControllerのサブクラスについてはGoogle Code Searchで出てくるMaxのソースが参考になる。