CloudKit CKModifyRecordsOperation Ошибка

Я использую CKModifyRecordsOperation для пакетного создания около 8000 записей в CloudKit. Тем не менее, я получаю странную ошибку для около 5% записей: record to insert already exists, Я не смог понять, почему это происходит после тщательного расследования и повторного тестирования. Примечания для рассмотрения:

  1. БД при запуске полностью пуста.
  2. Я создаю recordName локально для каждой записи, используя метод [NSUUID UUID].UUIDString, Во время повторного тестирования я также подтвердил, что нет дубликатов recordNames, создав набор recordNames и сравнив его количество с количеством записей для загрузки.
  3. Я проверил, что каждая запись загружается только один раз, добавив счетчик в операцию пакетной загрузки, чтобы сравнить общее количество записей перед загрузкой.
  4. Все записи загружены должным образом (сравнение количества в 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, поскольку третий тест завершен без ошибок.

Другие вопросы по тегам