<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">
}>当我试图将CKRecord保存到CloudKit时,我会得到这个错误。有什么想法吗?
我必须获取像方便API中的第一批记录吗?
我正在使用CKModifyRecordsOperation方法更新更多的记录。
发布于 2015-04-14 20:48:13
当您计划进行更新时,首先需要读取记录,进行更改,然后编写记录。您收到一个通知,即在读取和写入记录之间的时间内更改了记录。
如果服务器上的记录版本比您试图保存的版本更新,服务器将返回一个CKErrorServerRecordChanged错误。错误对象的userInfo字典包含冲突记录的不同版本。使用这些键检索记录,并执行解决冲突所需的任何解析逻辑。
如下面所讨论的,在您的示例中,问题是将对象持久化到数据库并重新创建CKRecord来进行修改。在这种情况下,您需要使用CKRecord encodeSystemFieldsWithCoder持久化系统字段。并通过使用一个CKRecord初始化它来重新创建它。您可以使用NSKeyedArchiver和NSKeyedUnarchiver来保存和重新创建CKRecord。如果您需要一个示例,请参阅fromCKRecord和toCKRecord方法在https://github.com/evermeer/EVCloudKitDao/blob/master/AppMessage/AppMessage/CloudKit/EVCloudKitDao.swift底部
https://stackoverflow.com/questions/29637057
复制相似问题