Нам нужно гораздо больше информации.
"... но когда мы перетаскиваем изображение в NSTableView"
Что вы подразумеваете под "изображением" и откуда (из какого приложения) вы перетаскиваете это изображение? Например, вы имеете в виду файл изображения (Picture.png) из Finder, который вы перетаскиваете в представление таблицы в своем приложении? Или из собственного приложения вы перетаскиваете какое-то изображение из одного места в табличное представление?
Это ваш собственный подкласс NSTableView
? Потому что это единственное место, где вы увидите, как зовут -performDragOperation:
или -prepareForDragOperation:
. По умолчанию NSTableView
переопределяет эти примитивные методы NSDraggingDestination, чтобы реализовать свой собственный метод, ориентированный на табличное представление, такой как упомянутый Бавариус (-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 и он зарегистрирован для типов данных, которые вы хотите.