NSPredicate使用NONE进行聚合操作

JGL*_*dio 5 core-data objective-c nspredicate ios

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

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

[NSPredicate predicateWithFormat:@"NONE answers.correct IN %@", [NSArray arrayWithObject:@"1"]];
Run Code Online (Sandbox Code Playgroud)

也试过NOT(ANY ...):同样的结果

这是一个Bug吗?

的DataModel

Mar*_*n R 19

简短回答:要获得所有没有"正确== 1"的"回答"的对象,请使用以下子 参数:

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

说明:两个谓词

[NSPredicate predicateWithFormat:@"NONE answers.correct == 1"]
[NSPredicate predicateWithFormat:@"NOT (ANY answers.correct == 1)"]
Run Code Online (Sandbox Code Playgroud)

应该工作(因为我理解NOT和ANY关键字),但他们没有.它们返回相同的结果集

[NSPredicate predicateWithFormat:@"ANY answers.correct != 1"]
Run Code Online (Sandbox Code Playgroud)

通过设置launch参数-com.apple.CoreData.SQLDebug 3和检查SQL select语句可以看出.

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