[英]How would I query CloudKit for a specific record by its recordName?
How would I query CloudKit for a specific record by its recordName?我如何通过记录名称查询 CloudKit 以获取特定记录?
The following code gives me an error.下面的代码给我一个错误。
let recordName = "BBBA9068-D01A-9D55-3D6B-4460A7B36D57"
let predicate = NSPredicate(format: "recordID=%@", recordName)
let query = CKQuery(recordType: "Route", predicate: predicate)
privateDatabase.perform(query, inZoneWith: nil) {
(records: [CKRecord]?, error: Error?) in
if error != nil {
print(error!.localizedDescription)
} else {
if let records = records {
print(records.first as Any)
}
}
}
The debug window shows:调试窗口显示:
Field '___recordID' has a value type of REFERENCE and cannot be queried using filter value type STRING字段“___recordID”的值类型为 REFERENCE,无法使用过滤器值类型 STRING 进行查询
I changed the first two lines of the code and got it to work.我更改了代码的前两行并让它工作。
let recordID: CKRecord.ID = CKRecord.ID(recordName: "BBBA9068-D01A-9D55-3D6B-4460A7B36D57")
let predicate = NSPredicate(format: "recordID=%@", recordID)
let query = CKQuery(recordType: "Route", predicate: predicate)
privateDatabase.perform(query, inZoneWith: nil) {
(records: [CKRecord]?, error: Error?) in
if error != nil {
print(error!.localizedDescription)
} else {
if let records = records {
print(records.first as Any)
}
}
}
Generate CKRecord.ID
by your recordName通过你的 recordName 生成CKRecord.ID
For one recordName you can do like that:对于一个 recordName 你可以这样做:
let recordID = CKRecord.ID(recordName: "recordName", zoneID: "Zone")
if you don't use zones, will automatically use the default zone如果您不使用区域,将自动使用默认区域
let recordID = CKRecord.ID(recordName: "recordName")
For multiple recordIDs:对于多个 recordID:
let recordIDs = recordNames.map { CKRecord.ID(recordName: $0) }
If you want to use predicate:如果你想使用谓词:
let recordIDs = recordNames.map { CKRecord.ID(recordName: $0) }
let predicate: NSPredicate = NSPredicate(format: "recordID IN %@", recordIDs)
Hopefully my answer meet your needs希望我的回答能满足您的需求
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.