2011-08-08 128 views
0

使用NSOutlineView + NSTreeController + Core數據導致奇怪的大綱視圖佈局。正如您在下面的圖片中看到的,大綱視圖在「父」展開時爲「子」創建了一個空間,而是在「父」的頂部繪製了「子」。我創建了一個按鈕,當它按下時會調用[outlineVIew reloadData]方法,使視圖正確繪製。基於視圖的NSOutlineView在父視圖上繪製子視圖

核心數據模型:

  • 孩子
  • isLeaf

我的廈門國際銀行設置:

  • NSOutlineView德勒吃了被設置爲文件的所有者
  • NSTreeController必然會我的文檔核心數據方面
  • NSTableColumn勢必NSTreeController.arrangedObjects
  • 的NSTextField勢必NSTableCellView.objectValue.name

NSPersistentDocument類:

- (void)windowControllerDidLoadNib:(NSWindowController *)aController 
{ 
    [super windowControllerDidLoadNib:aController]; 
    Node *parent = [self createNodeOfTypeString:@"Node"]; 
    Node *child = [self createNodeOfTypeString:@"Node"]; 
    parent.name = @"Parent"; 
    parent.isLeaf = NO; 
    [parent addChildrenObject:child]; 
    child.name = @"Child"; 
    child.isLeaf = YES; 
    [self.treeController addObject:parent]; 
} 

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

- (NSView *)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item { 
    if ([[item representedObject] isKindOfClass:[Node class]]) { 
     // Everything is setup in bindings 
     return [ov makeViewWithIdentifier:@"MainCell" owner:self]; 
    } 
    return nil; 
} 

結果:

大綱視圖與父母摺疊

Outline View With Parent Collapsed

大綱視圖與父母擴展和孩子畫上尚

Outline View With Parent Expanded and Child Drawn Atop

+0

'來自屏幕截圖的名稱'在哪裏?它沒有出現在模型中。 – TechZen

回答

0

這不是一個核心數據相關的問題。這是NSTreeController中的一些東西。即使數據模型返回錯誤的值,它們也不應該像這樣被相互繪製。

樹控制器未正確綁定某處。它應該只有一個顯示「Parent」的頂級節點。相反,它有第二個頂層節點顯示「名稱」。

相關問題