CloudKit CKModifyRecordsOperation Ошибка
Я использую CKModifyRecordsOperation для пакетного создания около 8000 записей в CloudKit. Тем не менее, я получаю странную ошибку для около 5% записей: record to insert already exists
, Я не смог понять, почему это происходит после тщательного расследования и повторного тестирования. Примечания для рассмотрения:
- БД при запуске полностью пуста.
- Я создаю recordName локально для каждой записи, используя метод
[NSUUID UUID].UUIDString
, Во время повторного тестирования я также подтвердил, что нет дубликатов recordNames, создав набор recordNames и сравнив его количество с количеством записей для загрузки. - Я проверил, что каждая запись загружается только один раз, добавив счетчик в операцию пакетной загрузки, чтобы сравнить общее количество записей перед загрузкой.
- Все записи загружены должным образом (сравнение количества в 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];
}
1 ответ
Похоже, что это проблема CloudKit, поскольку третий тест завершен без ошибок.