有没有办法根据存储在 CoreData 中的实际值来设置 NSPredicate?
Posted
技术标签:
【中文标题】有没有办法根据存储在 CoreData 中的实际值来设置 NSPredicate?【英文标题】:Is there a way to setup NSPredicate based on actual value stored in CoreData? 【发布时间】:2017-03-20 00:56:46 【问题描述】:我需要根据存储在 CoreDate 中的实际值来设置我的 NSPredicate。
假设我们有一个 CoreData 实体:“Graduate”。如果他/她的毕业日期不为空,我们想获取毕业日期早于 Date1 的毕业生。否则,我想检查他/她的生日是否早于 Date2。
谓词如下所示:
"if graduationDate != null graduationDate < %@ else birthday < %@"
所以我实际上有两个谓词。只有当第一个谓词要检查的字段为空时,第二个才应该生效。
我的想法:
我可以在我的 APP 而不是 CoreData 中处理它,但我想知道有没有办法只使用一个 NSPredicate 来解决它。
一些帖子提到 NSPredicate 等同于 SQL Where 子句,这对我来说很有意义。而且我认为我在这里需要的是超越 Where Clause 的能力。
我的问题不是关于如何使用 NSPredicate 过滤获取结果。这是关于如何使用 if else 子句之类的流控制来设置 NSpredicate
【问题讨论】:
developer.apple.com/library/content/documentation/Cocoa/… 向下滚动到“筛选结果”。这个问题也被问过几次,你可以在发布新问题之前进行搜索。您还可以根据需要为多个谓词添加 NSCompoundPredicate developer.apple.com/reference/foundation/nscompoundpredicate。 如果 NSPredicate 和 NSCompoundPredicate 是“基本用法”,您能否解释一下 Core Data fetching 的高级用法以及您的要求,对于我们受教育程度较低的基本用户而言? ios CoreData NSPredicate to query multiple properties at once的可能重复 【参考方案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]);
【讨论】:
以上是关于有没有办法根据存储在 CoreData 中的实际值来设置 NSPredicate?的主要内容,如果未能解决你的问题,请参考以下文章