2011-07-22 40 views
1

我有一个可以包含无限数量子项的CoreData模型。我想要显示的每个对象的列表,缩进了可读性,像这样从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中,我会创建一个简单的数组,它会遍历一些函数来构建这个列表,但这对我来说似乎仍然很愚蠢。

我得到一个平面阵列,基本上有这样的项目: array.name = @“Name”; array.children =无或coredata行 array.parent =无或coredata行

如何遍历此并显示列表缩进和分组像上面。

感谢任何指针或例子

着 - 下面指针完成了它:生成的代码如下:

生成的代码是(类似下面,我有我自己的调整,但多数民众赞成细节)

- (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]; 
    } 
} 

生成的数组:结果。包含一个数组,按顺序。与所有父母 - >孩子。 在我的情况下,在需要时缩进。 (使用额外的参数不是如上图所示)

回答

0

你开始与一个实体数据模型,它看起来像:

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

要使用你会做一个获取所有Node对象,它们的parent关系是零。那将是您的顶级对象。要查找下一级别的对象,您只需查询每个顶级对象的children属性。

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

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