CloudKit 如何修改现有记录 (swift 3)

CloudKit how to modify existing record (swift 3)

如何修改现有的 CloudKit 记录?

我从 CloudKit 收到一条记录,代码如下:

let name = tmpVar as! String

let container = CKContainer.default()
let privateDatabase = container.privateCloudDatabase
var predicate = NSPredicate(format: "email == %@", name)
var query = CKQuery(recordType: "MainTable", predicate: predicate)
privateDatabase.perform(query, inZoneWith: nil) { (results, error) -> Void in
if error != nil {
    pass
}
else {
    if (results?.count)! > 0 {
        for result in results! {
            self.likedArr.append(result)
        }

        if let checker = self.likedArr[0].object(forKey: "like") as? String {
            print ("CHEKER IS \(checker)")
            let intChecker = Int(checker)
            let result = intChecker! + 1
        } else {
            print ("EMPTY")
        }
    } else {
        print ("Login is incorrect")
    }

    OperationQueue.main.addOperation({ () -> Void in
        //   self.tableView.reloadData()
        //   self.tableView.isHidden = false
        //   MBProgressHUD.hide(for: self.view, animated: true)})}

以及如何 return 将 "like" 密钥的修改值返回给所有者 "name"?

当您从云端获取记录时,您可以将它们转换为 CKRecords。 在此 CKRecord 对象中,您只需修改要更新的值,然后再将其全部保存到云端。 CKRecordId 必须相同,否则你只会创建一个新记录。

修改记录的方法如下:

 MyCKRecord.setValue(object, forKey: "myKey")

当您调用查询时,您会得到一个包含 CKRecord 个对象的数组。使用下标编辑记录:

record["key"] = value as CKRecordValue

完成后,获取 CKRecord 并使用 CKModifyRecordsOperation or CKDatabase.save(_:completionHandler:) 将其保存回服务器。

分享我的解决方案:

self.likedArr[0].setValue(1, forKey: "like")
    let saveOper = CKModifyRecordsOperation()
    saveOper.recordsToSave = self.likedArr
    saveOper.savePolicy = .ifServerRecordUnchanged

    saveOper.modifyRecordsCompletionBlock = { savedRecords, deletedRecordIDs, error in

    if saveOper.isFinished == true {

    }
    }
    privateDatabase.add(saveOper)