1

我有一个MyEntity具有tags多对多关系的实体,tags一个NSSetof 也是如此MyEntity。它是可选的,所以有些MyEntity's没有tags. 这是我正在尝试做的事情:

 predicate= [NSPredicate predicateWithFormat:
 @"(rootId == parentId AND NONE tags.tagName == %@)", @"badTag"];

所以我想得到所有的MyEntitys地方rootId == parentId,如果它的标签有一个名为"badTag". 这样做的问题是,如果实体根本没有任何标签,则不会返回该实体。我尝试了上述的变体:

 @"(rootId == parentId AND ANY tags.tagName != %@)", @"badTag"];

但这给出了相同的结果。我怎样才能使这个谓词适用于实体根本没有任何标签的情况?

4

2 回答 2

1

您可以使用子查询谓词解决此问题。一旦掌握了子查询,它们就会变得非常强大。可悲的是,他们没有很好的记录。

(rootId == parentId) AND (SUBQUERY(tag, $x, $x.tagName == %@).count() == 0)
于 2012-05-23T18:43:30.510 回答
1

也许添加一个OR COUNT(tags) == 0会得到你想要的?

如果这是一个 SQL 存储,请尝试打开 CoreData SQL 调试并查看实际运行的内容。XCode4 和 Core Data:如何启用 SQL 调试

于 2012-05-23T12:41:36.020 回答