获取多个实体,它们之间没有关系

时间:2012-11-05 22:42:57

标签: uitableview core-data nsfetchedresultscontroller fetch nsfetchrequest

我有一个包含多个实体的核心数据模型,每个实体对应一个视图控制器,用户为每个实体插入信息,例如:

轮胎(第一个实体) - 类型(第一个属性),成本(第二个属性)。 玻璃(第二个实体) - 颜色(第一个属性),大小(第二个属性),成本(第三个属性)。

对于每个实体,我有一个带有文本字段的MVC,用户为每个实体插入信息,因此如果按下轮胎按钮,则为其他实体插入一种轮胎,成本......等等。

当我拉一个实体时,一切顺利,我在文本字段中插入信息然后按保存,它很好地出现在我的tableview上!但是,正如您已经知道的那样,我希望其余的实体插入到我的tableview和不同的部分中。

我曾尝试“搞乱”“cellForRowAtIndexPath”,也在我的“fetchedResultsController”方法中使用“if”和“swich”,但没有成功。我在这里缺少什么?!?!?!

谢谢,对不起我的英语。

1 个答案:

答案 0 :(得分:5)

您需要一个实体才能使NSFetchedResultsController正常工作,并利用其高级内存和性能功能。

因此,修改您的数据模型并创建一个新实体Item,它是其他实体的抽象父实体。 (您可以在模型编辑器中指定父实体。)确保所有项(例如名称)共享的属性属于父项。这些应该是您要在表视图中显示的属性。

现在,您可以为每个子实体添加唯一NSStringNSNumber属性type,并可以在NSFetchedResultsController中轻松按此键排序。

来自Apple的[核心数据编程指南] [1]:

  

如果定义实体继承层次结构(请参阅“实体继承”),则在指定超级实体作为获取请求的实体时,请求将返回超级实体和子实体的所有匹配实例。在某些应用程序中,您可以将超级实体指定为抽象(请参阅“抽象实体”)。要获取抽象实体的所有具体子实体的匹配实例,请将获取规范的实体设置为抽象实体。对于“抽象实体”中描述的域的情况,如果使用Graphic实体指定获取请求,则fetch返回Circle,TextArea和Line的匹配实例。

因此,您获取所有Items,按type排序,并为每个单元格确定类型并使用适当的属性填充文本标签。