OutlineView: objectValueForTableColumn: byItem: not called

I am trying to create a source list for a new program, and I have a small problem using views based NSOutlineView. My code works fine using cell-based NSOutlineView, so I'm a bit confused about what is going on.

Here is my code for the delegate and data source:

#pragma mark -
#pragma mark NSOutlineView Delegate

- (BOOL)outlineView:(NSOutlineView *)outlineView isGroupItem:(id)item {
    return (item == nil) ? YES : [(SourceListNode *)item groupItem];
}

- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
    if ([(SourceListNode *)item groupItem]) {
        return [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
    }
    else {
        return [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
    }
}

#pragma mark -
#pragma mark NSOutlineView Data Source

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
    return (item == nil) ? [sourceListNodes count] : [(SourceListNode *)item numberOfChildren];
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
    return (item == nil) ? YES : ([(SourceListNode *)item numberOfChildren] > 0);
}

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
    return (item == nil) ? [sourceListNodes objectAtIndex:index] : [(SourceListNode *)item childAtIndex:index];
}

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
    return [(SourceListNode *)item name];
}

When I run this through the debugger, it sees that outlineView:objectValueForTableColumn:byItem:it is not running. The result is a general view without text. The correct cells are created, and I can select and expand them. What am I missing?

UPDATE: I deleted my original list in IB, added a new one and connected it to my controller object. The results were better, but the header cells had the text "HEADER CELL", and the child cells had the "Table View Cell".

, outlineView:objectValueForTableColumn:byItem: . .

outlineView:viewForTableColumn:item: :

- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
    NSTableCellView *result;
    if ([(SourceListNode *)item groupItem]) {
        result = [outlineView makeViewWithIdentifier:@"HeaderCell" owner:self];
    }
    else {
        result = [outlineView makeViewWithIdentifier:@"DataCell" owner:self];
    }

    [[result textField] setStringValue:[(SourceListNode *)item name]];

    return result;
}

, .

, . . outlineView:objectValueForTableColumn:byItem: ? , .

+5
1

View-based .

, , "id" "NSView".

:

- (id)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item

:

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item

, 10.7, NSView.

+4

All Articles