UPDATE : link to the source source code of the source ( download )
I'm trying to implement a view-based NSOutlineView (Sourcelist), but I'm having problems. To illustrate this, I created a minimalist example.
I have a simple Person class. Each person has a name (NSString) and possibly some children (NSArray). I added NSOutlineView, connected it to IBOutlet, installed myself as a DataSource, and implemented the NSOutlineViewDataSource methods.
First, consider the case of CELL BASED NSOutlineView:
- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
{
if (!item)
{
return [self.persons count];
}
Person *person = (Person *)item;
return [person.children count];
}
- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item
{
if (!item)
{
return self.persons[index];
}
Person *person = (Person *)item;
return person.children[index];
}
- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
{
Person *person = (Person *)item;
if ([person.children count] > 0)
{
return YES;
}
return NO;
}
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
{
Person *person = (Person *)item;
return person.name;
}
It works as I expected:

, NSOutlineView VIEW BASED, -. "Table View Cell". , NSTableCellView:
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
{
Person *person = (Person *)item;
NSTableCellView *tableCellView = [outlineView makeViewWithIdentifier:@"PersonCell" owner:self];
tableCellView.textField.stringValue = person.name;
return tableCellView;
}
. TableCellView NSOutlineView PersonCell,


. , NSLog outlineView: objectValueForTableColumn: byItem: , .
NSTableViews, NSOutlineView NSTableView, .
.
!
/