2011-08-08 131 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”的顶级节点。相反,它有第二个顶层节点显示“名称”。

相关问题