我有一个可以包含无限数量子项的 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 = @"姓名"; array.children = nil 或 coredata 行 array.parent = nil 或核心数据行
我如何遍历它并显示一个像上面那样缩进和分组的列表。
在此先感谢您提供任何指示或示例
-- 通过下面的指针完成它:结果代码如下:
生成的代码是(类似于下面,我有自己的调整,但那是具体的)
- (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];
}
}
结果数组:result。按顺序包含一个数组。与所有 parent -> child 。 就我而言,在需要的地方缩进。 (使用上面未显示的额外参数)
最佳答案
您从一个包含一个实体的数据模型开始,该实体看起来像:
Node{
name:string
parent<<-->Node.children
children<-->>Node.parent
}
要使用它,您需要获取所有 Node
对象,它们的 parent
关系为 nil。那将是您的顶级对象。要查找下一级对象,您只需查询每个顶级对象的 children
属性。
您使用 UITableviewDelegate 的 tableView:indentationLevelForRowAtIndexPath:
方法缩进行。在这种情况下,您将通过获取每个节点对象然后递归地遍历它的父关系一直到顶部并计算步骤来计算每一行的缩进。
但是,在 iOS 上,不鼓励使用缩进的 tableview。如果您的目标是 iPhone,则缩进的表格 View 几乎毫无用处,因为您没有足够的屏幕区域来查看表格的有用数量。相反,使用导航 Controller 来显示 TableView 的层次结构,每个 TableView 显示不同级别的数据层次结构。
关于ios - 从 coredata 获取父子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6788913/