I'm trying to implement drag and drop from the Finder into an NSTableView of my app. The setup uses an NSTableView
, an array controller which acts as a datasource using Cocoa bindings to a Core Data store.
I did the following, basically following various blog posts I found on SO and other sites:
In the awakeFromNib
of my view controller I call:
[[self sourcesTableView] registerForDraggedTypes:[NSArray arrayWithObjects: NSPasteboardTypePNG, nil]];
I subclassed NSArrayController and added the following methods to my subclass (the reasoning for subclassing is that the array controller needs to be informed of the drop as it acts as the datasource of the table view):
- (BOOL) tableView: (NSTableView *) aTableView acceptDrop: (id < NSDraggingInfo >) info row: (NSInteger) row dropOperation: (NSTableViewDropOperation)operation
My implementation for the above currently only writes to the log and then returns a boolean YES.
- (NSDragOperation) tableView: (NSTableView *) aTableView validateDrop: (id < NSDraggingInfo >) info proposedRow: (NSInteger) row proposedDropOperation: (NSTableViewDropOperation) operation
In IB I have the array controller pointing to my custom NSArrayController subclass.
Result: nothing. When I drag a PNG from the desktop onto my table view, nothing happens and the file happily bounces back to its origin. I must be doing something wrong but don't understand what. Where am I going wrong?