我正在尝试创建一个谓词来过滤多对多关系。我有一个消息对象,其中有许多标签作为关系。
我可以执行以下操作:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY labels.labelId == 4"];
我只会收到带有 labelId 4 的标签的消息。但是如果我这样做
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"NONE labels.labelId == 4"];
这将为我提供我拥有的每一个 Message 对象,即使它们与 labelId 4 的 Label 存在关系。为什么会这样?有人可以帮忙吗?
最佳答案
似乎“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"]
关于core-data - 核心数据: Many-to-many Predicate NOT not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14998807/