提问人:Codebrah 提问时间:7/12/2022 最后编辑:Codebrah 更新时间:7/12/2022 访问量:189
NSPredicate 筛选器小于 OR nil
NSPredicate filter for less than OR nil
问:
我希望 NSPredicate 为我返回 keyPath 的结果,该结果要么是 nil...或小于给定日期。我正在使用 NSPredicate 获取核心数据。
这些工作正常...
let endDatePredicate = NSPredicate(format: "%K > %@", #keyPath(RepeatingTask.endDate), date as NSDate)
let endDatePredicate = NSPredicate(format: "%K == nil", #keyPath(RepeatingTask.endDate), date as NSDate)
但是我无法让它们与 OR 运算符一起正常工作......
let endDatePredicate = NSPredicate(format: "%K > %@ || %K == nil", #keyPath(RepeatingTask.endDate), date as NSDate)
let endDatePredicate = NSPredicate(format: "%K > %@ OR %K == nil", #keyPath(RepeatingTask.endDate), date as NSDate)
let endDatePredicate = NSPredicate(format: "(%K > %@) || (%K == nil)", #keyPath(RepeatingTask.endDate), date as NSDate)
答:
2赞
LoVo
7/12/2022
#1
可以使用 NSCompoundPredicate。例如:
let first = NSPredicate(format: "%K > %@", #keyPath(RepeatingTask.endDate), date as NSDate)
let second = NSPredicate(format: "%K == nil", #keyPath(RepeatingTask.endDate), date as NSDate)
let predicate = NSCompoundPredicate(orPredicateWithSubpredicates: [first, second])
评论
%K
NSPredicate(format: "%K > %@ OR %K == nil", #keyPath(RepeatingTask.endDate), date as NSDate, #keyPath(RepeatingTask.endDate))