如何在 CloudKit 中查询 recordID [CKRecordID]
Posted
技术标签:
【中文标题】如何在 CloudKit 中查询 recordID [CKRecordID]【英文标题】:How to query CloudKit for recordID IN [CKRecordID] 【发布时间】:2015-10-02 03:41:38 【问题描述】:我的谓词想要排除一些已经下载并在 [CKRecordID] 中可用的记录。现在我可以查询 1 个 CKRecordID[0],但不能查询 [CKRecordID] 数组。如何查询数组?
let excludeIDs: [CKRecordID]
这行得通:
let pred1 = NSPredicate(format: "NOT(recordID = %@)", excludeIDs[0])
但这不是:
let pred1 = NSPredicate(format: "NOT(recordID IN %@)", excludeIDs)
错误: loadImageCompareRecordIDsAndEndDateThatHaveNotEnded 错误:无效谓词:无效谓词:数组成员必须符合 CKRecordValue: ( "", "", "", "", “” ) (CKRecordID)
代码的其他通用部分:
let sort = NSSortDescriptor(key: "creationDate", ascending: false)
let query = CKQuery(recordType: MyRecordTypes.ImageCompare, predicate: pred1)
query.sortDescriptors = [sort]
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["endDate"]
operation.resultsLimit = 50
【问题讨论】:
【参考方案1】:使用 [CKReference] 而不是 [CKRecordID] 解决了它。
【讨论】:
谢谢,奇怪的 CKRecordID 适用于单一比较 @SamBallantyne 只需将您的记录 ID 转换为 CKReference,例如 let refs = myRecords.map( CKReference(recordID: $0.record.recordID, action: .None) )【参考方案2】:明确地说(因为我花了好几个小时才把它弄好)...
let refs = excludeIDs.map CKRecord.Reference(recordID: $0.recordID, action: .none)
let pred1 = NSPredicate(format: "NOT(recordID IN %@)", refs)
【讨论】:
以上是关于如何在 CloudKit 中查询 recordID [CKRecordID]的主要内容,如果未能解决你的问题,请参考以下文章
CloudKit 上的 CKReference 使用 Swift
CKReferences 未出现在 CloudKit 仪表板中
NSCompoundPredicate 和 Cloudkit