【问题标题】:NSPredicate Aggregate Operations with NONENSPredicate 聚合操作与 NONE
【发布时间】:2013-01-06 11:19:09
【问题描述】:

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

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

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

还尝试了 NOT (ANY ...):结果相同

这是一个错误吗?

【问题讨论】:

    标签: ios objective-c core-data nspredicate


    【解决方案1】:

    简答:要获取所有没有“正确== 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 选择语句可以看出。

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

    【讨论】:

    • 如果一个问题有 2 个用户答案,一个正确 = 1,另一个正确 = 0,这并不能满足我的需要。这个问题还是被选中的。我只需要没有被正确回答的问题。
    • @JglStudioUs:奇怪。我稍后会在我的电脑前检查。 “正确”的属性是存储为字符串还是数字?
    • @JglStudioUs:你说得对,谓词不像我预期的那样起作用(我还没有弄清楚为什么)。以下(稍微复杂一点的)谓词在我的测试中起作用:@"SUBQUERY(answers, $a, $a.correct == 1).@count == 0",你能试试吗?
    • Martin: @"SUBQUERY(answers, $a, $a.correct == 1).@count == 0" 对我有用。
    • @JglStudioUs:好的。我很确定我的答案是正确的,但这对我来说似乎是一个核心数据错误。我会相应地更新答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2014-12-19
    • 2015-08-26
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多