我试图建立一个谓词来过滤多对多的关系。我有一个Message对象,其中包含许多标签作为关系。
我可以做以下事情:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY labels.labelId == 4"];
我将只获得带有labelId 4的Label的消息。但是如果我这样做
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"NONE labels.labelId == 4"];
这将为我提供每个单一的Message对象,即使它们与Label具有labelId 4的关系。为什么会这样?有人可以帮忙吗?
答案 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"]