【发布时间】:2020-09-09 21:41:01
【问题描述】:
当我写入 CloudKit 的公共容器时,我收到以下错误:
CKError 0x283a01a10:“服务器记录已更改”(14/2004); server message = "要插入的记录已经存在"
我目前正在使用以下代码进行保存:
let publicCloudDatabase = CKContainer.default().publicCloudDatabase
let operation = CKModifyRecordsOperation(recordsToSave: [exampleRecord], recordIDsToDelete: nil)
let operationConfiguration = CKOperation.Configuration()
operationConfiguration.allowsCellularAccess = true
operationConfiguration.qualityOfService = .userInitiated
operation.configuration = operationConfiguration
publicCloudDatabase.add(operation)
publicCloudDatabase.save(progressRecord) { record, error in
if let error = error {
print("\(error)")
} else {
print("Success")
}
}
我在多个帖子中看到,例如 this 或 this,我需要先从服务器获取现有数据,然后在再次上传之前对其进行修改,因为我不应该创建新记录每次。我想知道这是否仅适用于私有容器,因为将其他人的内容提取到您的设备上并在上传之前对其进行修改确实没有意义。如果是这样,为什么会出现此错误以及如何解决。
如果是这种情况,我也没有意义,然后只在记录中下载我的数据并在上传之前对其进行修改,因为 1)我并没有真正修改我现有的数据,我正在添加新数据数据到服务器和 2) 错误表明 record 已经存在,这意味着它仍然会说记录已经存在。
【问题讨论】:
-
我不认为这就是你使用
CKModifyRecordsOperation的方式。如果要新建记录,可以使用perform方法。 -
@ElTomato 谢谢
-
记录必须是唯一的。我会研究记录代码的创建,并确保记录 ID 是唯一的。