繁体   English   中英

我如何通过记录名称查询 CloudKit 以获取特定记录?

[英]How would I query CloudKit for a specific record by its recordName?

我如何通过记录名称查询 CloudKit 以获取特定记录?

下面的代码给我一个错误。

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)

        }

    }

}

调试窗口显示:

字段“___recordID”的值类型为 REFERENCE,无法使用过滤器值类型 STRING 进行查询

我更改了代码的前两行并让它工作。

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)

        }

    }

}

通过你的 recordName 生成CKRecord.ID

对于一个 recordName 你可以这样做:

let recordID = CKRecord.ID(recordName: "recordName", zoneID: "Zone")

如果您不使用区域,将自动使用默认区域

let recordID = CKRecord.ID(recordName: "recordName") 

对于多个 recordID:

let recordIDs = recordNames.map { CKRecord.ID(recordName: $0) }

如果你想使用谓词:

let recordIDs = recordNames.map { CKRecord.ID(recordName: $0) }
let predicate: NSPredicate = NSPredicate(format: "recordID IN %@", recordIDs)

希望我的回答能满足您的需求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM