NSOutlineView läd keine Kind Knoten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • NSOutlineView läd keine Kind Knoten

    Hallo,

    Ich versuche ein Tree View Widget mit Daten zu befüllen. Für die oberste Ebene funktioniert das auch, jedoch nicht für tiefere Knoten. Laut Doku wird die data source über 4 Funktionen gesteuert.
    In meinem Fall ist item für die ersten 3 Funktionen immer nil, also das root item, obwohl ich in der ersten Funktion den entsprechenden Kindknoten zurückgebe. Bevor ich jetzt Code poste, würde ich erstmal grundlegend klären wie das ganze funktioniert.
    Ich habe das jetzt so verstanden, dass das zurückgegebene item der ersten Funktion erneut die erste Funktion aufruft und immer tiefer schachtelt, bis die 3. Funktion 0 zurückgibt.

    Die 2. Funktion gibt in meinem Fall YES zurück für das root item.

    Kann mir hier jemand weiter helfen.

    Danke
  • wenn in der child:ofItem das item nil ist, dann gibst du das root item an dem index zurück.
    wenn es nicht nil ist, dann gibst du das child item genau jenen items das übergeben wird an dem index zurück.

    bei numberOfChildrenOfItem ist es das gleiche.

    die anderen methoden kannst du ja mittels return YES; und return @"TEST"; kurzschließen ;)
  • ich meine das bereits zu tun. ich gebe für item nil bei Anzahl Kinder 1 zurück und bei child:ofItem das root item. Jedoch wird child:ofItem und numberOfChildren nie für das root item aufgerufen. Das sollte doch ohne extra Aufruf passieren. Möglicherweise steckt das Problem in der Initialisierung der outlineview.
    Die Texte aller root items (indem Fall nur eins) werden auch angezeigt.

    header ohne data source

    C-Quellcode

    1. @interface CocoaTreeViewContent : NSOutlineView {}
    2. @end
    3. @interface CocoaTreeViewCell : NSTextFieldCell {}
    4. @end
    5. @interface CocoaTreeView : NSScrollView <NSOutlineViewDelegate, NSOutlineViewDataSource> {
    6. @public
    7. GUIKIT::TreeView* treeView;
    8. CocoaTreeViewContent* content;
    9. NSFont* font;
    10. }
    11. @end
    12. Auszüge aus der implementation: Grundsätzlich erstelle ich die outline view "content" innerhalb einer scrollview.
    13. @implementation CocoaTreeView : NSScrollView
    14. -(id) initWith:(GUIKIT::TreeView&)treeViewReference {
    15. if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) {
    16. treeView = &treeViewReference;
    17. content = [[CocoaTreeViewContent alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)];
    18. [self setDocumentView:content];
    19. [self setBorderType:NSBezelBorder];
    20. [self setHasVerticalScroller:YES];
    21. [content setDataSource:self];
    22. [content setDelegate:self];
    23. [content setTarget:self];
    24. [content setDoubleAction:@selector(doubleAction:)];
    25. [content setAllowsColumnReordering:NO];
    26. [content setAllowsColumnResizing:YES];
    27. [content setAllowsColumnSelection:NO];
    28. [content setAllowsEmptySelection:YES];
    29. [content setAllowsMultipleSelection:NO];
    30. [content setHeaderView:nil];
    31. [content setColumnAutoresizingStyle:NSTableViewLastColumnOnlyAutoresizingStyle];
    32. font = nil;
    33. [self setFont:nil];
    34. [self reloadColumns];
    35. }
    36. return self;
    37. }
    38. -(void) reloadColumns {
    39. while([[content tableColumns] count]) {
    40. [content removeTableColumn:[[content tableColumns] lastObject]];
    41. }
    42. NSTableColumn* tableColumn = [[NSTableColumn alloc] initWithIdentifier:[[NSNumber numberWithInteger:0] stringValue]];
    43. NSTableHeaderCell* headerCell = [[NSTableHeaderCell alloc] initTextCell:@""];
    44. CocoaTreeViewCell* dataCell = [[CocoaTreeViewCell alloc] initTextCell:@""];
    45. [dataCell setEditable:NO];
    46. [tableColumn setResizingMask:NSTableColumnAutoresizingMask | NSTableColumnUserResizingMask];
    47. [tableColumn setHeaderCell:headerCell];
    48. [tableColumn setDataCell:dataCell];
    49. [content addTableColumn:tableColumn];
    50. [content setOutlineTableColumn:tableColumn];
    51. }
    52. ....
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von PiCiJi ()