发布更新 CKRecord

Posted

技术标签:

【中文标题】发布更新 CKRecord【英文标题】:Issue update a CKRecord 【发布时间】:2016-05-31 17:01:31 【问题描述】:

我无法保存已保存的记录。 recordToSave 是从服务器下载的 CKRecord。是否可以更新它?

recordTosave.setValue("cat", forKey: "animal")

let publicData = CKContainer.defaultContainer().publicCloudDatabase

publicData.saveRecord(recordToSave, completionHandler:(record: CKRecord?, error: NSError?) in
    if error == nil  

    else
        print(error.debugDescription)
    
)

【问题讨论】:

我们需要更多细节。 print(error.debugDescription) 输出什么?如果这不起作用,请尝试print(error)。另外,您如何创建/检索recordTosave 【参考方案1】:

您不能插入已存在于 cloudkit 中的记录。您可以使用 CKModifyRecordsOperation 修改记录。使用记录ID获取记录,然后通过修改操作进行更新。

let recordIDToSave = CKRecordID(recordName: "recordID")
let publicData = CKContainer.defaultContainer().publicCloudDatabase

publicData.fetchRecordWithID(recordIDToSave)  (record, error) in

    if let recordToSave =  record 

        //Modify the record value here
        recordToSave.setObject("value", forKey: "key")

        let modifyRecords = CKModifyRecordsOperation(recordsToSave:[recordToSave], recordIDsToDelete: nil)
        modifyRecords.savePolicy = CKRecordSavePolicy.AllKeys
        modifyRecords.qualityOfService = NSQualityOfService.UserInitiated
        modifyRecords.modifyRecordsCompletionBlock =  savedRecords, deletedRecordIDs, error in
            if error == nil 
                print("Modified")
            else 
                print(error)
            
        
        publicData.addOperation(modifyRecords)
    else
        print(error.debugDescription)
    

【讨论】:

不幸的是它给了我一个错误:Optional(). 我发现了错误,感谢 Kiruthika。你的代码是正确的。 很好的解释。欣赏它,修改记录的好方法:)

以上是关于发布更新 CKRecord的主要内容,如果未能解决你的问题,请参考以下文章

试图快速修改ckrecord

快速从 Cloudkit 中删除 CKRecord

如何更新云套件数据

CloudKit-不会更新 (Swift)

如何更新 CloudKit 中记录类型上的字段?

CloudKit-更新记录:使用“saveRecord”更新记录时出现“客户端 oplock 错误”