0

使用 NSOutlineView + NSTreeController + Core Data 会导致奇怪的大纲视图布局。正如您在下图中所见,大纲视图在展开“父级”时为“子级”创建了一个空间,而是将“子级”绘制在“父级”之上。我创建了一个按钮,按下该按钮会调用 [outlineVIew reloadData] 方法,该方法会导致视图正确绘制。

核心数据模型:

  • 父母
  • 孩子们
  • 是叶
  • 姓名

我的xib设置:

  • 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;
}

结果:

折叠父级的大纲视图

折叠父级的大纲视图

父级展开和子级绘制在上面的大纲视图

父级展开和子级绘制在上面的大纲视图

4

1 回答 1

0

这不是与核心数据相关的问题。这是 NSTreeController 中的东西。即使数据模型返回错误的值,它们也不应该像那样相互重叠。

树控制器在某处未正确绑定。它应该只有一个显示“父级”的顶部节点。相反,它有一个显示“名称”的第二个顶部节点。

于 2011-08-09T21:46:50.243 回答