<CKError 0x14d8cb70: "Partial Failure" (2/1011); "Failed to modify some records"; partial errors: {
B5DEF0B5-F064-4B27-9C89-BE75C9134297:(_defaultZone:__defaultOwner__) = <CKError 0x14d83b70: "Server Record Changed" (14/2037); "Error saving record <CKRecordID: 0x15748cd0; B5DEF0B5-F064-4B27-9C89-BE75C9134297:(_defaultZone:__defaultOwner__)> to server: Protection data didn't match">
}>
Run Code Online (Sandbox Code Playgroud)
当我尝试保存CKRecords 时,我收到此错误CloudKit.任何的想法?
我是否必须像在便捷API中那样获取第一条记录?
我正在使用CKModifyRecordsOperation方法来更新更多记录.
当您计划进行更新时,首先需要读取记录,进行更改然后写入记录.您收到通知,说明记录在读取和写入记录之间的时间内发生了变化.
如果服务器上的记录版本比您尝试保存的版本新,则服务器返回CKErrorServerRecordChanged错误.错误对象的userInfo字典包含冲突记录的不同版本.使用这些键可以检索记录并执行解决冲突所需的任何解析逻辑.
正如您在下面讨论的那样,问题在于您将对象持久保存到数据库并重新创建CKRecord以进行修改.在这种情况下,您需要使用CKRecord encodeSystemFieldsWithCoder持久保存系统字段.并通过使用NSCoder初始化来重新创建CKRecord.您可以使用NSKeyedArchiver和NSKeyedUnarchiver来保存CKRecord并重新创建它.如果您需要样本,请参阅https://github.com/evermeer/EVCloudKitDao/blob/master/AppMessage/AppMessage/CloudKit/EVCloudKitDao.swift底部的fromCKRecord和toCKRecord方法.
| 归档时间: |
|
| 查看次数: |
2005 次 |
| 最近记录: |