The best thing to do is to study the example DragNDropOutlineView, Getting data wrapped inside the NSTreeNode is easy, you simply access to the representedObject property
For example take a look at (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
present in DragNDropOutlineView, where item is an NSTreeNode instance
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
id objectValue = nil;
SimpleNodeData *nodeData = [item representedObject];
...
...
}