如何修改现有的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)})}
以及如何将其返回修改后的值"喜欢"所有者的关键"名称"?
答案 0 :(得分:0)
当您从云端获取记录时,您可以将它们转换为CKRecords。 在此CKRecord对象中,您只需修改要更新的值,然后将其全部保存到云中。 CKRecordId必须相同,否则您只会创建一个新记录。
以下是如何修改记录:
MyCKRecord.setValue(object, forKey: "myKey")
答案 1 :(得分:0)
调用查询时,会得到一组CKRecord
个对象。使用下标编辑记录:
record["key"] = value as CKRecordValue
完成后,请使用CKRecord并使用CKModifyRecordsOperation
或CKDatabase.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)