4

我试图为过滤多对多关系创建一个谓词。我有一个带有许多标签作为关系的 Message 对象。

我可以执行以下操作:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY labels.labelId == 4"];

而且我只会收到带有 labelId 4 的标签的消息。但是如果我这样做了

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"NONE labels.labelId == 4"];

这将给我我拥有的每一个 Message 对象,即使它们与 labelId 为 4 的 Label 有关系。这是为什么呢?有人可以帮忙吗?

4

1 回答 1

11

在 Core Data 谓词中,“NONE”或“NOT ANY”似乎无法正常工作。两个谓词

 NONE labels.labelId == 4
 NOT (ANY labels.labelId == 4)

实际上返回相同的结果

 ANY labels.labelId != 4

这不是我理解文档的方式。作为一种解决方法,您可以使用 SUBQUERY:

[NSPredicate predicateWithFormat:@"SUBQUERY(labels, $x, $x.labelId == 4).@count == 0"]
于 2013-02-21T10:41:42.460 回答