2011-04-25 45 views
0

我有一个非常简单的数据模型,由2个对象组成 - 一个Section和一个Item。每个Section与其他Section对象具有多对多子关系,并与另一个Section对象具有一对一父对子关系。每个部分都与Item对象有多对多的关系。具有嵌套对象关系作为数据源的CoreData模型?

data model

结构之外,一些Section对象没有Item对象,和其他人(在层次结构的底部)没有Section子对象。

我想创建一个tableview,它将使用Section对象来创建节标题,然后将Item对象显示为作为Section的一部分的tableViewCells。如果Section没有Items,我也希望表格标题出现,因为看到层次结构很重要。

给定一个随机的Section对象,我将如何去获取和显示这些数据?我是否需要创建一个嵌套的循环来平滑数组中的数据,还是有一些非常棒的方式来利用谓词和NSFetchedResultsController

+0

你怎么想的'Item'对象进行排序。由于他们只有一个'text'属性,你想要他们排序吗?你想要在'Section.ID'或'Section.name'上进行排序,然后是文本吗? – TechZen 2011-04-25 19:14:58

+0

我只是简化了这个例子的模型,'Item'对象也有一个ID。 – 2011-04-26 15:19:14

+0

在此处构建一个“Item”对象表。因此,为了回答你的问题,我需要知道你想在表中排序对象的关键。 – TechZen 2011-04-26 18:10:17

回答

0

我会建立你的NSFetchedResultsController与一个排序描述符,通过该部分的ID排序项目。

喜欢的东西:

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

这将给你NSFetchedResultsController所有部分进行分组的正确项。然后你只需要充实你的表视图数据源并相应地进行委托。

+0

在这种情况下,我将如何构建谓词?想要获取给定'部分'的所有项目以及子部分的所有项目。 – 2011-04-25 18:48:12

+0

在我的示例中,您将抓取所有部分中的所有项目,它们将按部分进行排序(在表格中以及在NSFRC内)。在这种情况下,您不需要谓词,只需设置NSFRC实体并将它们全部抓住即可。 – NWCoder 2011-04-25 18:55:14

0
  1. 设置你的取实体Item
  2. 提供抓取两种类型的描述符。第一个应该在section.ID上排序,第二个应该排序在id。这将返回一个Item对象的数组,首先按部分排序,然后再按其自己的id属性排序。
  3. 初始化提取结果控制器时,请将sectionNameKeyPath参数设置为section.ID。这将导致段名称显示为Section.ID值。

这应该给你这样一个表:

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