fetchedresultscontroller有两个实体 - 谓词来定位每个实体?

时间:2011-03-17 09:47:34

标签: iphone objective-c core-data

我的iPhone应用程序有一个摘要页面(UITableView),我想在其中显示快速概述,因此我需要从多个实体获取信息。有人建议创建一个抽象的父实体,让我的两个实体作为这个实体的子项。这允许我使用一个fetchedresultscontroller获取两个实体。

这有效,但我发现我需要过滤一点点返回。由于上面的'hack',这些实体没有任何共同之处,因此我需要完全独立的谓词。因此,我需要“color = blue”和EntityB“length> = 10”。因为我实际查询的实体没有这些根本不起作用。

有没有办法做到这一点或者这里最好的方法是什么?

2 个答案:

答案 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视图控制器类。