ios - 从 coredata 获取父子数组

标签 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 中,我会创建一个简单的数组,我将遍历一些函数来构建这个列表,但这对我来说仍然太难了。

我得到了一个平面数组,它基本上有这样的项目: 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/

相关文章:

ios - 带有 libgdx 和 RoboVM 的 Hello world 应用程序未在 iOS 上运行 - ArrayIndexOutOfBoundsException

objective-c - 由于事件断言超出允许的时间,应用程序崩溃

ios - 核心数据关系 - 购物车

ios - 为什么 Xcode 无法识别我的核心数据实体的属性

ios - NSFetchedResultsController performFetch : 之后显然是错误的部分索引标题

iphone - NSFetchedResultsController 部分本地化排序

PHP 和 Objective C Blowfish 加密编码不同

ios - FBSDKAppInviteDialog 不工作

ios - NSPredicate 和丹麦字母 å 给出了错误的结果

objective-c - 如何清除 NSFetchedResultsController?