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