2

我的模型如下所示:

模型

在我的测试项目中,我有以下两种方法:

- (void) addChildWithName:(NSString*)name toParent:(Item*)parent
{
    static NSUInteger count = 1;

    Item*   childItem;


    childItem = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:[self managedObjectContext]];
    [childItem setName:[NSString stringWithFormat:@"%@ %lu", name, count]];
    [childItem setParent:parent];

    count++;
}



- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
    [super windowControllerDidLoadNib:aController];
    // Add any code here that needs to be executed once the windowController has loaded the document's window.


    Item*   rootItem;

    rootItem = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:[self managedObjectContext]];
    [rootItem setName:@"rootItem"];

    [self addChildWithName:@"rootChild" toParent:rootItem];
    [self addChildWithName:@"rootChild" toParent:rootItem];
    [self addChildWithName:@"rootChild" toParent:rootItem];
    [self addChildWithName:@"rootChild" toParent:rootItem];
    [self addChildWithName:@"rootChild" toParent:rootItem];
}

这会产生一个大纲视图,如下所示:

结果

对于 xib 中的树控制器对象,我已将 Children Key Path 设置为“children”。托管对象上下文 (moc) 绑定到文件所有者 moc。我的大纲视图的表列的值绑定到 NSTreeController 的排列对象,模型键路径为“名称”。

如您所见,当子项只应出现在根项下时,我得到了子项的重复条目。

我究竟做错了什么?

示例项目位于示例项目链接

谢谢你。

4

1 回答 1

2

您的数组控制器需要一个“获取谓词”来仅在属性为 nilItem时选择对象,使用.parentparent == nil

于 2013-02-03T22:05:42.737 回答