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

Posted

技术标签:

【中文标题】CloudKit-更新记录:使用“saveRecord”更新记录时出现“客户端 oplock 错误”【英文标题】:CloudKit- update record: "client oplock error" when updating record using "saveRecord" 【发布时间】:2016-02-06 11:32:12 【问题描述】:

我正在尝试将 CKRecord 更新为公共数据库。启动和下载效果很好。

func upDatePublicRecord()   
        let database:CKDatabase = CKContainer.defaultContainer().publicCloudDatabase  

        if let myID = self.ID   
            database.fetchRecordWithID(myID, completionHandler:  (myRecord, error) in  
                if error != nil   

                    print("Error fetching record: \(error!.localizedDescription)")  

                 else   

                    print("publicrecord fetched")  
                    myRecord!["name"] = self.name  
                  //and more code to change other properties  

                  //save back to iCloud  

                    CKContainer.defaultContainer().privateCloudDatabase.saveRecord(myRecord!)  [unowned self] (record, error) -> Void in  
                        dispatch_async(dispatch_get_main_queue())   
                            if error == nil   

                            print("update success")  

                             else   
                                print("Error in update public: \(error!.localizedDescription)")  
            
           
           
          )  
          
      

这适用于在 privateCloudDatabase 中更新,对于公共数据库我收到此错误:

更新公共错误:保存记录时出错CKRecordID:0x7f855dbcdb70; F3C192C8-6E81-493E-9E1A-75C5F3826F78:(_defaultZone:defaultOwner) 到服务器:客户端 oplock 错误更新记录

这是什么意思?我应该怎么做才能更新公共记录?

【问题讨论】:

【参考方案1】:

您遇到了复制和粘贴问题。您正在从公共数据库中获取,但您正在尝试保存到私有数据库。

改变这个:

CKContainer.defaultContainer().privateCloudDatabase.saveRecord(myRecord!)  [unowned self] (record, error) -> Void in  

到:

CKContainer.defaultContainer().publicCloudDatabase.saveRecord(myRecord!)  [unowned self] (record, error) -> Void in  

【讨论】:

以上是关于CloudKit-更新记录:使用“saveRecord”更新记录时出现“客户端 oplock 错误”的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 CloudKit 订阅通知以触发记录属性更新?

记录更新的 CloudKit 推送通知停止工作

如何通知另一台设备 CloudKit 记录已更新?

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

如何让多个用户同时更新我的​​一条 CloudKit 记录而不重叠?

如何从 CloudKit 更新所有客户端记录?