从coredata获取父子数组

时间:2011-07-22 10:49:47

标签: ios core-data nsfetchedresultscontroller traversal

我有一个可以包含无数个孩子的CoreData模型。我想显示每个对象的列表,为了便于阅读而缩进

Object
  Object first child
    first childs children
    first child children
  Object second child
Object 2
  Object also has children
  MOre children
    Childs

现在我来自PHP背景。在PHP中我会创建一个简单的数组,Ill遍历一些函数来构建这个列表,但这对我来说似乎仍然很难。

我有一个扁平数组,基本上有这样的项目: array.name = @“名称”; array.children = nil或coredata行 array.parent = nil或coredata row

如何遍历此列表并显示缩进列表并按上述方式分组。

感谢任何指针或示例

- 使用下面的指针完成它:结果代码如下:

结果代码是(类似于以下内容,我有自己的调整,但具体是这些)

- (NSArray *)flattenGroupsWithParent:(NSManagedObject<ECCGroup> *)parent {
    //findGroupsForGroups gets all nodes with parent: parent.
    NSArray *children = [dataSource findGroupsForGroup:parent];
    for (NSManagedObject<ECCGroup> *child in children) {
        ECCGroupNode *node = [[ECCGroupNode alloc] initWithGroup:child label:child.name];
        [result addObject:node];
        [result addObjectsFromArray:[self flattenGroupsWithParent:child]];
        [node release];
    }
}

结果数组:结果。按顺序包含一个数组。与所有父母一起 - &gt;儿童。 在我的情况下,缩进到需要的地方。 (使用上面未显示的额外参数)

1 个答案:

答案 0 :(得分:0)

您从一个数据模型开始,其中一个实体看起来像:

Node{
  name:string
  parent<<-->Node.children
  children<-->>Node.parent
}

要使用,您可以对Node关系为零的所有parent个对象进行抓取。那将是你的顶级对象。要查找下一级对象,您只需查询每个顶级对象的children属性。

使用UITableviewDelegate的tableView:indentationLevelForRowAtIndexPath:方法缩进行。在这种情况下,您将通过获取每个节点对象然后递归地将其父级关系一直移动到顶部并计算步骤来计算每行的缩进。

但是,在iOS上,不鼓励使用缩进的表格视图。如果您的目标是iPhone,则缩进的tableview旁边没用,因为您没有足够的屏幕区域来查看有用的表量。而是使用导航控制器显示每个显示不同级别的数据层次结构的tableviews层次结构。