【问题标题】:'NSInvalidArgumentException', reason: 'Unsupported predicate (null)''NSInvalidArgumentException',原因:'不支持的谓词(空)'
【发布时间】:2014-07-17 18:29:50
【问题描述】:

我得到这个不受支持的谓词错误,同时试图实例化一个 带有聚合谓词的 NSFetchedResultsController。

我的 Coredata 结构如下所示 - 有一个 PurchaseDetails 实体,它有 n 个支付实体(一对多关系)。每个 Payment 都有一个类型,例如 Cash、Check、Other 等。现在我需要获取 Payment.type = Cash 的所有 PurchaseDetails 的列表。

NSPredicate 看起来像这样:@"ALL payments.type = 'cash'"

我们不应该使用 ALL 吗? 谓词不会在创建时崩溃,而是在执行 fetch 请求时崩溃。

但是当单独使用而不使用NSFetchedResultsController 时,相同的获取请求可以正常工作。他们俩不会一起工作吗?

【问题讨论】:

    标签: ios objective-c core-data aggregate nspredicate


    【解决方案1】:

    是的,如果付款是一对多关系,您需要使用 ALL。请注意,这意味着每笔付款的type 将是@"cash"。如果您只想要至少一笔现金付款,请使用ANY

    错误消息中的(null) 暗示了其他内容。您是否将谓词附加到 fetch 请求?

    另外,您是否尝试在获取的结果控制器中设置cache:nil? FRC 可能是您得到陈旧结果的原因。

    【讨论】:

    • 是的,我只需要 PurchaseDetails,其中所有付款均为“现金”类型。它在[controller performFetch:&error] 崩溃,并且获取请求也是正确的。如果我用ANY 替换它,一切正常,但它不是缩进谓词。
    • 所以它可能“不起作用”,因为有一个付款类型不是cash 或未设置。 -- 此外,使用 FRC 时,经常会出现缓存问题。初始化时尝试设置cache:nil
    • 感谢您的帮助。我确保缓存为零。我没有得到你的第一点。
    • 第一点:我的意思是,检查你的数据。也许谓词是正确的,但数据不包含您所期望的。
    猜你喜欢
    • 2012-05-14
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多