我一直在测试 CloudKit,因为我希望在 iOS8 发布时发布使用它的应用程序。使用以下代码保存数据似乎很简单:

CKRecordID * recordID = [[CKRecordID alloc] initWithRecordName:@"basicRecord"];
CKRecord * record = [[CKRecord alloc] initWithRecordType:@"basicRecordType" recordID:recordID];
[record setValue:@"defaultValue" forKey:@"defaultKey"];
CKDatabase *database = [[CKContainer defaultContainer] publicCloudDatabase];
[database saveRecord:record completionHandler:^(CKRecord *record, NSError *error) {

    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"Record Saved!");
    }
}];

而且我没有收到任何错误。但是,如果我再次尝试运行代码,可能是因为我已将记录值更改为
[record setValue:@"newValue" forKey:@"defaultKey"];

我收到一个错误提示,我该如何保存修改后的数据。毕竟,这是将事物保存到云端的基本部分。错误如下,任何帮助将不胜感激,请随时询问更多信息。
Error: <CKError 0x17024afb0: "Server Record Changed" (14/2017); "Error saving record <CKRecordID: 0x144684a80; basicRecord:(_defaultZone:__defaultOwner__)> to server: (null)"; uuid = 182C497F-966C-418A-9E6A-5563BA6CC6CD; container ID = "iCloud.com.yourcompany.CloudKit">

最佳答案

此错误可能是因为 saveRecord: 仅适用于新记录或比服务器上版本更新的记录:



修改现有记录(或记录集)的推荐方法是使用具有所需 CKModifyRecordsOperationsavePolicy 集来处理冲突:

10-08 06:21
查看更多