我正在尝试在我的应用程序的NSTableView中实现从Finder的拖放操作。此设置使用NSTableView,一个数组控制器作为数据源,使用Cocoa绑定到Core Data存储。
基本上,我按照在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文件拖到表格视图上时,什么也没有发生,这个文件愉快地弹回到它的起点。我一定做错了什么,但不明白是什么。我哪里出了问题?