使用 NSPredicate 查询 CloudKit 以获取空白(或 null 或其他)的日期
Posted
技术标签:
【中文标题】使用 NSPredicate 查询 CloudKit 以获取空白(或 null 或其他)的日期【英文标题】:Query CloudKit with NSPredicate for Date that is blank (or null or whatever) 【发布时间】:2017-05-30 22:02:22 【问题描述】:我想查询 CloudKit 以获取所有日期为空白 (0/00/0000 00:00:00) 的记录,但我不知道如何创建一个可以做到这一点的谓词。
这是我尝试过的,以及相关的错误:
let predicate = NSPredicate(format: "ready == nil") // <ready != nil>: <nil> is not a function expression
let predicate = NSPredicate(format: "ready == NIL") // <ready == nil>: <nil> is not a function expression
let predicate = NSPredicate(format: "ready != NULL") // <ready != nil>: <nil> is not a function expression
let predicate = NSPredicate(format: "ready == %@", NSNull()) // NSNull not allowed in comparison expression
let predicate = NSPredicate(format: "ready == $NULL") // Unable to parse the format string "ready == $NULL"
let predicate = NSPredicate(format: "ready == $BLANK") // <ready == $BLANK>: <$BLANK> is not a function expression
let blankDate: Date = Date.init()
let predicate = NSPredicate(format: "ready == %@", blankDate as NSDate)
let haveADate = NSPredicate(format: "ready > %@", NSDate.distantPast as NSDate)
let predicate = NSCompoundPredicate(notPredicateWithSubpredicate: haveADate) // Inverting a valid one doesn't work either
【问题讨论】:
经过更多研究,我认为这是不可能的。根据此处接受的答案:***.com/questions/32683691/… CloudKit 是一个键值存储,因此如果尚未设置该值,则该键甚至不存在。 【参考方案1】:我相信您的问题类似于this one。
您应该尝试使用 "(ready >= %@) AND (ready <= %@)"
与两个参考值进行比较,而不是 "ready == %@"
。
【讨论】:
以上是关于使用 NSPredicate 查询 CloudKit 以获取空白(或 null 或其他)的日期的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NSPredicate 中重现 MATCHES 以查询 Realm?
NSPredicate 使用 CoreData 进行多个 ANY 查询
Core Data 中的 URI 类型属性:如何使用 NSPredicate 进行查询