如何从CoreData中的实体子集中检索相对分数

时间:2010-04-23 23:43:06

标签: objective-c cocoa core-data orm entity-relationship

很抱歉这个问题很长,但我认为还需要一些背景知识:S

我在CoreData中有以下模型:

Model http://mikeholman.org/model.png

访客可以在其分数关系中拥有任意数量的分数。在客人关系中,得分最多可以有两位客人。

对于每对Guest实体,我的模型都有一个Score实体,其值表示它们彼此之间的相互关系。

在我的界面中,我希望用户能够从列表中选择任何访客,然后查看所有其他访客的第二个列表以及将每个访客与最初选择的客人如此:

alt text http://mikeholman.org/interface.png

为第一张桌子(tv1)提取所有来宾的数组非常简单。目前,对于第二个表,我通过使用以下谓词过滤此数组来获取所有其他来宾:

[NSPredicate predicateWithFormat:
    [NSString stringWithFormat:@"not displayName == '%@'", 
        [[allGuests objectAtIndex:[tv1 selectedRow]] valueForKey:@"displayName"]]];

哪个有效,但我的问题是知道如何显示正确的Score.value。我觉得我应该使用所选Guest.scores的关系来填充第二个tableview,但我不知道如何做到这一点。任何指针都会受到欢迎 - 谢谢!

1 个答案:

答案 0 :(得分:0)

我终于成功地为自己解决了这个问题。这就是我最终做到的方式:

  1. 从第一个表格视图中保留对所选Guest实体的引用。
  2. 使用来自ManagedObjectContext的所有Score对象请求使用NSPredicate过滤:

    @“任何来宾.DisplayName =%@”,[来宾显示名称]

  3. 使用返回的Score对象检索值

  4. 从(3)中检索每个Score对象的guest虚拟机,并使用另一个NSPredicate进行过滤:

    @“NOT displayName =%@”,[guestA displayName]

  5. 由于Score.guests关系最多有2个Guest对象,因此生成的已筛选NSMutableSet必须包含通过当前Score与第一个选定Guest关联的Guest。因此,排除已知的选定访客会给出所需的答案。