【发布时间】:2017-04-27 16:59:45
【问题描述】:
我正在使用 CKModifyRecordsOperation 在 CloudKit 中批量创建大约 8000 条记录。但是,对于大约 5% 的记录,我遇到了一个奇怪的错误:record to insert already exists。在彻底调查和重新测试后,我一直无法弄清楚为什么会发生这种情况。需要考虑的注意事项:
- 数据库在启动时完全为空。
- 我使用
[NSUUID UUID].UUIDString方法为每条记录在本地创建一个recordName。在重新测试期间,我还通过创建一组记录名称并将其计数与要上传的总记录计数进行比较,确认没有重复的记录名称。 - 我通过在批量上传操作中添加一个计数器来比较预上传的总记录数,验证了每条记录只上传一次。
- 所有记录均已正确上传(将 CloudKit 中的计数与上传的总记录进行比较) - 所以不确定为什么会出现“错误”。
关于为什么会产生这些错误的任何想法?
代码:
- (void)uploadInitialRecordsToCloudKit:(NSArray *)recordsToUpload {
NSArray *recordsForThisBatch = recordsToUpload;
NSArray *remainingRecords = nil;
if ([recordsToUpload count] > 350) recordsForThisBatch = [recordsToUpload subarrayWithRange:NSMakeRange(0, 350)];
remainingRecords = [recordsToUpload subarrayWithRange:NSMakeRange([recordsForThisBatch count], [recordsToUpload count] -[recordsForThisBatch count])];
CKModifyRecordsOperation *modifyRecordsOperation = [[CKModifyRecordsOperation alloc] initWithRecordsToSave:recordsForThisBatch recordIDsToDelete:nil];
modifyRecordsOperation.modifyRecordsCompletionBlock = ^(NSArray<CKRecord *> * _Nullable savedRecords, NSArray<CKRecordID *> * _Nullable deletedRecordIDs, NSError * _Nullable operationError) {
if (operationError) NSLog(@"Error during batch save to CK: %@\n\n%@", [operationError localizedDescription], operationError.userInfo);
else NSLog(@"Batch upload to CK successful");
if ([remainingRecords count] > 0) [self uploadInitialRecordsToCloudKit:remainingRecords];
};
[[CKContainer defaultContainer] publicCloudDatabase] addOperation:modifyRecordsOperation];
}
【问题讨论】:
-
使用相关代码编辑您的问题,展示您如何使用操作以及如何进行错误处理。
-
8000/350 = 22.8 ?您确定要上传的 .8 批记录没有某种重叠吗?
标签: ios objective-c cloudkit