核心数据:多对多谓词不起作用

时间:2013-02-21 09:35:50

标签: core-data ios6 nspredicate

我试图建立一个谓词来过滤多对多的关系。我有一个Message对象,其中包含许多标签作为关系。

我可以做以下事情:

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

我将只获得带有labelId 4的Label的消息。但是如果我这样做

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

这将为我提供每个单一的Message对象,即使它们与Label具有labelId 4的关系。为什么会这样?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:11)

似乎“无”或“无任何”在Core Data谓词中无法正常工作。两个谓词

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

实际上返回与

相同的结果
 ANY labels.labelId != 4

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

[NSPredicate predicateWithFormat:@"SUBQUERY(labels, $x, $x.labelId == 4).@count == 0"]