}> 我在尝试将 CKRecord 保存到 CloudKit 时遇到此错误。有什么想法吗? 我是否必须像在便捷 A-6ren">
gpt4 book ai didi

ios - CloudKit:使用 CKModifyRecordsOperation 保存记录时出错

转载 作者:可可西里 更新时间:2023-11-01 05:28:17 24 4
gpt4 key购买 nike

<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 方法来更新更多记录。

最佳答案

当您打算进行更新时,您首先需要读取记录,进行更改,然后写入记录。在读取和写入记录之间的时间内,您收到一条记录已更改的通知。

如果服务器上记录的版本比您尝试保存的版本新,服务器将返回 CKErrorServerRecordChanged 错误。错误对象的 userInfo 字典包含了不同版本的冲突记录。使用这些键检索记录并执行解决冲突所需的任何解决逻辑。

正如下面在您的案例中所讨论的,问题是您将对象保存到数据库并重新创建了 CKRecord 以进行修改。在这种情况下,您需要使用 CKRecord encodeSystemFieldsWithCoder 来持久化系统字段。并通过使用 NSCoder 对其进行初始化来重新创建 CKRecord。您可以使用 NSKeyedArchiver 和 NSKeyedUnarchiver 来保存 CKRecord 并重新创建它。如果您需要示例,请参阅 https://github.com/evermeer/EVCloudKitDao/blob/master/AppMessage/AppMessage/CloudKit/EVCloudKitDao.swift 底部的 fromCKRecord 和 toCKRecord 方法。

关于ios - CloudKit:使用 CKModifyRecordsOperation 保存记录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29637057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com