核心数据NSPredicate具有多种关系

时间:2013-04-10 18:00:59

标签: ios objective-c core-data

我需要提取获取请求,而我无法弄清楚我需要的NSPredicate请求。这是场景:

我有一个List实体,list对象与一组Request个对象有多对多的关系。每个Request对象与一组Tags个对象具有多对多关系。

我需要在Tags实体上执行获取请求,但我无法确定调用的NSPredicate。我只想提取特定列表所有请求的所有标记中的tags

这是我尝试过的:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag in ANY list.requests.tags"];

但我知道这不对。我无法指定我的列表,list.requests也会返回NSSet,而我不能只对.tags进行设置。我很困惑。

如果有帮助,我附上了一段关系:

enter image description here

1 个答案:

答案 0 :(得分:2)

创建子查询。

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(requests, $request, $request.list = %@).@count > 0", list];

这会计算具有指定列表的请求;如果计数超过一个,则采用标记。

你也可以这样做:

[list.requests valueForKeyPath:@"tags.@distinctUnionOfSets"]

这使用键值编码来检索属于所有请求的所有标记,并将它们统一到一个集合中。这种方法效率低于前者。