我有一个包含多个实体的核心数据模型,每个实体对应一个视图控制器,用户为每个实体插入信息,例如:
轮胎(第一个实体) - 类型(第一个属性),成本(第二个属性)。 玻璃(第二个实体) - 颜色(第一个属性),大小(第二个属性),成本(第三个属性)。
对于每个实体,我有一个带有文本字段的MVC,用户为每个实体插入信息,因此如果按下轮胎按钮,则为其他实体插入一种轮胎,成本......等等。
当我拉一个实体时,一切顺利,我在文本字段中插入信息然后按保存,它很好地出现在我的tableview上!但是,正如您已经知道的那样,我希望其余的实体插入到我的tableview和不同的部分中。
我曾尝试“搞乱”“cellForRowAtIndexPath”,也在我的“fetchedResultsController”方法中使用“if”和“swich”,但没有成功。我在这里缺少什么?!?!?!
谢谢,对不起我的英语。
答案 0 :(得分:5)
您需要一个实体才能使NSFetchedResultsController
正常工作,并利用其高级内存和性能功能。
因此,修改您的数据模型并创建一个新实体Item
,它是其他实体的抽象父实体。 (您可以在模型编辑器中指定父实体。)确保所有项(例如名称)共享的属性属于父项。这些应该是您要在表视图中显示的属性。
现在,您可以为每个子实体添加唯一NSString
或NSNumber
属性type
,并可以在NSFetchedResultsController
中轻松按此键排序。
来自Apple的[核心数据编程指南] [1]:
如果定义实体继承层次结构(请参阅“实体继承”),则在指定超级实体作为获取请求的实体时,请求将返回超级实体和子实体的所有匹配实例。在某些应用程序中,您可以将超级实体指定为抽象(请参阅“抽象实体”)。要获取抽象实体的所有具体子实体的匹配实例,请将获取规范的实体设置为抽象实体。对于“抽象实体”中描述的域的情况,如果使用Graphic实体指定获取请求,则fetch返回Circle,TextArea和Line的匹配实例。
因此,您获取所有Items
,按type
排序,并为每个单元格确定类型并使用适当的属性填充文本标签。