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

pla*_*hen 4 core-data nspredicate ios6

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

我可以做以下事情:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY labels.labelId == 4"];
Run Code Online (Sandbox Code Playgroud)

我只会获得带有labelId 4的Label的消息.但是如果我这样做的话

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"NONE labels.labelId == 4"];
Run Code Online (Sandbox Code Playgroud)

这将给我每个单独的Message对象,即使它们与LabelId具有标签关系.为什么会这样?有人可以帮忙吗?

Mar*_*n R 11

似乎"无"或"无任何"在Core Data谓词中无法正常工作.两个谓词

 NONE labels.labelId == 4
 NOT (ANY labels.labelId == 4)
Run Code Online (Sandbox Code Playgroud)

实际上返回相同的结果

 ANY labels.labelId != 4
Run Code Online (Sandbox Code Playgroud)

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

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