我的iPhone应用程序有一个摘要页面(UITableView),我想在其中显示快速概述,因此我需要从多个实体获取信息。有人建议创建一个抽象的父实体,让我的两个实体作为这个实体的子项。这允许我使用一个fetchedresultscontroller获取两个实体。
这有效,但我发现我需要过滤一点点返回。由于上面的'hack',这些实体没有任何共同之处,因此我需要完全独立的谓词。因此,我需要“color = blue”和EntityB“length> = 10”。因为我实际查询的实体没有这些根本不起作用。
有没有办法做到这一点或者这里最好的方法是什么?
答案 0 :(得分:1)
Niether UITableView或NSFetchedResultsController旨在一次处理多个实体。而且,尝试这样做很少有任何意义。如果您发现自己处于这种情况,则可能需要重新考虑数据模型设计。
如果实体 逻辑 相互关联,那么它们应该通过关系链接。如果来自任何两个对象的数据要显示在同一个tableviewCell中而不是乱码,那么它们必须具有某种逻辑关联,因此应该通过某种关系进行链接。要在表格中显示,您可以获取关系的一侧,然后遍历关系,以查找其他相关对象。
如果逻辑关联很强,则应将其定义为数据模型中的正式关系,例如:
EntityA{
//... some attributes
b<-->B.a
}
EntityB{
//...some attributes
a<-->A.b
}
但是,如果关系很弱或是暂时的,那么您应该使用fetched property来关联它们。 fetched属性根据预编程的提取动态搜索其他实体。
EntityA{
creationDate:date
someBs--(creationDate=$FETCH_SOURCE.creationDate)-->B
}
EntityB{
creationDate:date
}
这里的一个关键概念是Core Data提供模型 - 视图 - 控制器设计的整个模型层。它不仅仅是一个愚蠢的数据库,而是一个对数据本身及其行为进行建模的活动对象图。一旦有了正确设计的数据模型,控制器和视图的问题就会自动解决。
答案 1 :(得分:0)
如果我理解正确,您可以使用通知并将所需信息的字典发送到UITableView视图控制器类。