【问题标题】:Is there a way to setup NSPredicate based on actual value stored in CoreData?有没有办法根据存储在 CoreData 中的实际值来设置 NSPredicate?
【发布时间】:2017-03-20 00:56:46
【问题描述】:

我需要根据存储在 CoreDate 中的实际值来设置我的 NSPredicate。

假设我们有一个 CoreData 实体:“Graduate”。如果他/她的毕业日期不为空,我们想获取毕业日期早于 Date1 的毕业生。否则,我想检查他/她的生日是否早于 Date2。

谓词如下所示:

"if graduationDate != null graduationDate < %@ else birthday < %@"

所以我实际上有两个谓词。只有当第一个谓词要检查的字段为空时,第二个才应该生效。

我的想法:

  1. 我可以在我的 APP 而不是 CoreData 中处理它,但我想知道有没有办法只使用一个 NSPredicate 来解决它。

  2. 一些帖子提到 NSPredicate 等同于 SQL Where 子句,这对我来说很有意义。而且我认为我在这里需要的是超越 Where Clause 的能力。

我的问题不是关于如何使用 NSPredicate 过滤获取结果。这是关于如何使用 if else 子句之类的流控制来设置 NSpredicate

【问题讨论】:

标签: ios swift core-data


【解决方案1】:

您可以使用NSCompoundPredicate 组合较小的谓词。

    let graduates = NSPredicate.init(format: "graduationDate != NULL AND graduationDate < %@ ", graduationDate);
    let oldPeople = NSPredicate.init(format: "graduationDate == NULL AND birthday > %@ ", cutOffBirthday);
    let predicate = NSCompoundPredicate.init(orPredicateWithSubpredicates: [graduates, oldPeople]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2014-02-27
    • 2017-04-22
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    相关资源
    最近更新 更多