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