核心数据模型,嵌套对象关系作为数据源?

时间:2011-04-25 15:07:41

标签: iphone ios ipad core-data

我有一个非常简单的数据模型,由2个对象组成 - SectionItem。每个Section与其他Section对象具有多对子关系,并且与另一个Section对象具有一对一的父关系。每个部分都与Item个对象具有多对多关系。

data model

除了结构之外,一些Section个对象没有Item个对象,而其他对象(位于层次结构的底部)没有Section个子对象。

我想创建一个tableview,它将使用Section个对象来创建节标题,然后将Item个对象显示为tableViewCells,它们是Section的一部分。如果Section没有Items,我还希望显示表标题,因为查看层次结构非常重要。

给定一个随机Section对象,我将如何获取并显示此数据?我是否需要创建一个扁平化数组中的数据的嵌套循环,或者是否有一些很好的方法来利用谓词和NSFetchedResultsController

2 个答案:

答案 0 :(得分:0)

我会使用排序描述符构建您的NSFetchedResultsController,该描述符按节的ID对项目进行排序。

类似的东西:

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"section.ID" ascending:YES];

这将为您的NSFetchedResultsController提供按部分分组的所有正确项目。然后你只需要充实你的表视图数据源并相应地委派。

答案 1 :(得分:0)

  1. 将您的获取实体设置为Item
  2. 提供两个排序描述符。第一个应排序section.ID,第二个应排序id。这将返回一个Item对象数组,这些对象首先按部分排序,然后按自己的id属性排序。
  3. 初始化提取的结果控制器时,将sectionNameKeyPath参数设置为section.ID。这将导致节名称显示为Section.ID值。
  4. 那应该给你一个这样的表:

    Section.ID
        Item.ID
        Item.ID
        Item.ID
    Section.ID
        Item.ID
    .... and so on.