Нам нужно гораздо больше информации.
«... но когда мы перетащить изображение, чтобы NSTableView»
Что вы имеете в виду под „изображение“, и где (какое приложение) вы перетаскиванием это изображение от? Например, вы имеете в виду файл изображения (Picture.png) из Finder, который вы перетаскиваете в представление таблицы в своем приложении? Или из собственного приложения вы перетаскиваете какое-то изображение из одного места в свое табличное представление?
Это ваш собственный подкласс NSTableView
? Потому что это единственное место, где вы увидите -performDragOperation:
или -prepareForDragOperation:
. По умолчанию NSTableView
переопределяет эти примитивные методы NSDraggingDestination для реализации своих собственных методов, ориентированных на таблицу, таких как Bavarious (-tableView:validateDrop:proposedRow:proposedDropOperation:
, -tableView:acceptDrop:row:dropOperation:
и т. Д.). Если вы говорите о том, что эти методы не вызывается в NSTableView
подкласса, то помните, что в документации говорится, для -prepareForDragOperation::
Этот метод вызывается только тогда, когда последнего draggingEntered: или draggingUpdated : сообщение возвращается значение приемлемых перетащить операции
Итак, первое, что вам нужно, чтобы убедиться, что вы зарегистрировали для типов сопротивления вы хотите, то вам нужно реализовать -draggingEntered
.
Если, с другой стороны, вы не говорите о подклассе NSTableView
, а о внешнем классе контроллера, то да, то performDragOperation:
и prepareForDragOperation:
не вызывают его. Другими словами, если у вас есть класс контроллера, скажем, MDAppController
, он установлен как делегат и источник данных NSTableView
, -performDragOperation:
и prepareForDragOperation:
MDAppController
не будут вызываться. Эти методы предназначены для классов, основанных на NSView
. По этой причине NSTableView
имеет следующий метод, определенный в протоколе NSTableViewDataSource
: tableView:validateDrop:proposedRow:proposedDropOperation:
. Если вы реализуете это в своем классе контроллера, его следует вызывать, если вы правильно настроили tableView, и он был зарегистрирован для типов данных, которые вы хотите.