2

我需要发出一个 fetch 请求,但我无法确定该请求所需的 NSPredicate。这是场景:

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

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

这是我尝试过的:

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

但我知道这是不对的。我无法指定我的列表,也list.requests返回一个NSSet,而且我不能只.tags在一组上做。我很困。

我附上了一张关系图片,以防万一:

在此处输入图像描述

4

1 回答 1

2

创建子查询。

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

这会计算具有指定列表的请求;如果计数大于一,则使用标签。

你也可以这样做:

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

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

于 2013-04-10T18:16:58.923 回答