从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中,我将创建一个简单的数组,Ill遍历一些函数来构建这个列表,但这对我来说似乎仍然很难。
我有一个扁平数组,基本上有这样的项目:array.name = @“Name”; array.children = nil或coredata rows array.parent = nil或coredata row
如何遍历此列表并显示缩进列表并按上述方式分组。
感谢任何指针或示例
– 使用下面的指针完成它:结果代码如下:
结果代码是(类似于以下,我有我自己的调整,但这是具体的)
- (NSArray *)flattenGroupsWithParent:(NSManagedObject *)parent { //findGroupsForGroups gets all nodes with parent: parent. NSArray *children = [dataSource findGroupsForGroup:parent]; for (NSManagedObject *child in children) { ECCGroupNode *node = [[ECCGroupNode alloc] initWithGroup:child label:child.name]; [result addObject:node]; [result addObjectsFromArray:[self flattenGroupsWithParent:child]]; [node release]; } }
结果数组:结果。 按顺序包含一个数组。 与所有父母 – >孩子。 在我的情况下,在需要的地方缩进。 (使用上面未显示的额外参数)
您从具有一个实体的数据模型开始,该实体看起来像:
Node{ name:string parent<<-->Node.children children<-->>Node.parent }
要使用它,将对parent
关系为nil的所有Node
对象进行提取。 那将是你的顶级对象。 要查找下一级对象,您只需查询每个顶级对象的children
属性。
您使用UITableviewDelegate的tableView:indentationLevelForRowAtIndexPath:
方法tableView:indentationLevelForRowAtIndexPath:
。 在这种情况下,您将通过获取每个节点对象然后递归地将其父级关系一直移动到顶部并计算步骤来计算每行的缩进。
但是,在iOS上,不鼓励使用缩进的表格视图。 如果你的目标是iPhone,那么缩进的tableview就会毫无用处,因为你没有足够的屏幕区域来查看有用数量的表。 而是使用导航控制器显示每个显示不同级别的数据层次结构的tableviews层次结构。