Я пытаюсь реализовать перетаскивание из Finder в NSTableView моего приложения. В настройке используется NSTableView
, контроллер массива, который действует как источник данных, используя привязки Cocoa к хранилищу основных данных.
Я сделал следующее, в основном следуя различным сообщениям в блоге, которые я нашел на SO и других сайтах:
В awakeFromNib
моего контроллера просмотра я вызываю:
[[self sourcesTableView] registerForDraggedTypes:[NSArray arrayWithObjects: NSPasteboardTypePNG, nil]];
Я подклассифицировал NSArrayController и добавил к моему подклассу следующие методы (аргументация для подкласса заключается в том, что диспетчер массива должен быть проинформирован о падении, поскольку он действует как источник данных в представлении таблицы):
- (BOOL) tableView: (NSTableView *) aTableView acceptDrop: (id < NSDraggingInfo >) info row: (NSInteger) row dropOperation: (NSTableViewDropOperation)operation
Моя реализация для вышеперечисленного в настоящее время только записывает в журнал, а затем возвращает логическое значение YES.
- (NSDragOperation) tableView: (NSTableView *) aTableView validateDrop: (id < NSDraggingInfo >) info proposedRow: (NSInteger) row proposedDropOperation: (NSTableViewDropOperation) operation
В IB у меня есть контроллер массива, указывающий на мой пользовательский подкласс NSArrayController.
Результат: ничего. Когда я перетаскиваю PNG с рабочего стола на мой табличный вид, ничего не происходит, и файл с радостью отскакивает назад. Я должен делать что-то неправильно, но не понимаю, что. Где я ошибаюсь?