NSPredicate使用NONE进行聚合操作

时间:2013-01-23 03:19:56

标签: ios objective-c core-data nspredicate

如何创建可以获取的谓词:所有问题都不包含answer.correct = "1"

如果返回的数组包含“0”和“1”,则以下谓词不起作用:

[NSPredicate predicateWithFormat:@"NONE answers.correct IN %@", [NSArray arrayWithObject:@"1"]];

还尝试使用NOT(ANY ...):相同的结果

这是一个Bug吗?

DataModel

1 个答案:

答案 0 :(得分:18)

简答:要获取所有没有“正确== 1”的“回答”的对象,请使用以下 SUBQUERY

[NSPredicate predicateWithFormat:@"SUBQUERY(answers, $a, $a.correct == 1).@count == 0"]

说明:两个谓词

[NSPredicate predicateWithFormat:@"NONE answers.correct == 1"]
[NSPredicate predicateWithFormat:@"NOT (ANY answers.correct == 1)"]

应该工作(因为我理解NOT和ANY关键字),但他们没有。 它们返回与

相同的结果集
[NSPredicate predicateWithFormat:@"ANY answers.correct != 1"]

可以通过设置启动参数-com.apple.CoreData.SQLDebug 3并检查SQL select语句来看到。

这对我来说似乎是一个核心数据错误。使用SUBQUERY是解决该问题的方法。