もっと多くの情報が必要です。
「...しかし、画像をNSTableViewにドラッグすると」
「画像」とは何を意味し、この画像をどこ (どのアプリケーション) からドラッグしていますか? たとえば、Finder からアプリケーションのテーブル ビューにドラッグしている画像ファイル (Picture.png) を意味しますか? または、独自のアプリケーションから、ある場所からテーブル ビューに画像をドラッグしていますか?
これは の独自のカスタム サブクラスNSTableView
ですか? それはあなたが見-performDragOperation:
たり-prepareForDragOperation:
、呼ばれたりする唯一の場所だからです。デフォルトでは、NSTableView
これらのプリミティブな NSDraggingDestination メソッドをオーバーライドして、前述の Bavarous ( 、 など) のような独自のテーブルビュー指向のメソッドを実装し-tableView:validateDrop:proposedRow:proposedDropOperation:
ます-tableView:acceptDrop:row:dropOperation:
。NSTableView
これらのメソッドがサブクラスで呼び出されていないという事実について話している場合は、 -prepareForDragOperation:のドキュメントの状態を思い出してください。
このメソッドは、最新の dragEntered: または dragUpdated: メッセージが許容可能なドラッグ操作値を返した場合にのみ呼び出されます。
したがって、まず、必要なドラッグ タイプを登録したことを確認してから、 を実装する必要があります-draggingEntered
。
一方、NSTableView
サブクラスについて話しているのではなく、外部コントローラー クラスについて話している場合は、そうです、それらperformDragOperation:
とprepareForDragOperation:
は呼び出されません。つまり、コントローラ クラスがある場合、たとえばMDAppController
のデリゲートおよびデータソースに設定されている場合NSTableView
、 の-performDragOperation:
およびprepareForDragOperation:
はMDAppController
呼び出されません。これらのメソッドは、NSView
ベースのクラス用です。そのため、プロトコルNSTableView
で次のメソッドが定義されています: . コントローラ クラスでそれを実装する場合は、tableView を適切に設定し、必要なデータの種類に登録されていれば、呼び出す必要があります。NSTableViewDataSource
tableView:validateDrop:proposedRow:proposedDropOperation: