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

时间:2017-06-25 17:24:28

标签: swift cloudkit

如何修改现有的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)})}

以及如何将其返回修改后的值"喜欢"所有者的关键"名称"?

3 个答案:

答案 0 :(得分:0)

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

以下是如何修改记录:

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

答案 1 :(得分:0)

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

record["key"] = value as CKRecordValue

完成后,请使用CKRecord并使用CKModifyRecordsOperationCKDatabase.save(_:completionHandler:)将其保存回服务器。

答案 2 :(得分:0)

分享我的解决方案:

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)