Мне нужно экспортировать данные из словаря из 12 тысяч предметов в Cloudkit. Я попытался использовать удобный API, но я продолжаю использовать ограничение скорости при попытке сохранить в публичной базе данных. Затем я попробовал API-интерфейс операции, и я получил аналогичную ошибку. Мой вопрос: как сэкономить очень большой объем данных для облачного без ущерба для пределов?Экспорт записей в cloudkit
ответ
Согласно документации для кода CKErrorLimitExceeded
ошибок, вы должны
Попробуйте рефакторинга ваш запрос на несколько небольших партий.
Так что, если ваши CKModifyRecordsOperation
результаты работы в ошибке CKErrorLimitExceeded
, вы можете просто создать два CKModifyRecordsOperation
объектов, каждый из которых половины данных из провалившейся операции. Если вы сделаете это рекурсивно (так что любая из операций разделения может также потерпеть неудачу с превышением предела превышения, разделить снова на два), тогда вы должны в конечном итоге получить несколько объектов CKModifyRecordsOperation
, которые имеют достаточно небольшое количество записей, чтобы избежать ошибки.
Если у вас есть собственный сервер, вы можете попробовать API CloudKit Web Service.
В прошивкой 10, максимально допустимое количество записей в операции 400.
/// The system allowed maximum record modifications count.
///
/// If excute a CKModifyRecordsOperation with more than 400 record modifications, system will return a CKErrorLimitExceeded error.
private let maximumRecordModificationsLimit = 400
private func modifyRecords(recordsToSave: [CKRecord], recordIDsToDelete: [CKRecordID], previousRetryAfterSeconds: TimeInterval = 0, completion: ((Bool) -> Void)? = nil) {
guard !recordsToSave.isEmpty || !recordIDsToDelete.isEmpty else {
completion?(true)
return
}
func handleLimitExceeded() {
let recordsToSaveFirstSplit = recordsToSave[0 ..< recordsToSave.count/2]
let recordsToSaveSecondSplit = recordsToSave[recordsToSave.count/2 ..< recordsToSave.count]
let recordIDsToDeleteFirstSplit = recordIDsToDelete[0 ..< recordIDsToDelete.count/2]
let recordIDsToDeleteSecondSplit = recordIDsToDelete[recordIDsToDelete.count/2 ..< recordIDsToDelete.count]
self.modifyRecords(recordsToSave: Array(recordsToSaveFirstSplit), recordIDsToDelete: Array(recordIDsToDeleteFirstSplit))
self.modifyRecords(recordsToSave: Array(recordsToSaveSecondSplit), recordIDsToDelete: Array(recordIDsToDeleteSecondSplit), completion: completion)
}
if recordsToSave.count + recordIDsToDelete.count > maximumRecordModificationsLimit {
handleLimitExceeded()
return
}
// run CKModifyRecordsOperation at here
}
- 1. CloudKit: Предотвращение повторяющихся записей
- 2. Неисправность замены записей CloudKit
- 3. Чтение записей CloudKit после сохранения
- 4. CloudKit возвращает слишком много записей
- 5. CloudKit: CKQueryOperation для удаленных записей
- 6. Ошибка клиента oplock, сохранение записей в CloudKit
- 7. Сохранение записей в CloudKit не работает
- 8. Создание записей CloudKit в запланированные дни
- 9. Экспорт BinarySearchTree записей в список
- 10. Экспорт mongoexport 0 записей
- 11. Получите количество записей, которые соответствуют запросу CloudKit
- 12. Каким образом CloudKit Dashboard записывает типы записей?
- 13. поиска и возврата одного поля cloudkit записей
- 14. Как загрузить несколько записей из cloudkit
- 15. ActiveAdmin csv экспорт записей заказов
- 16. Экспорт XLS с +80.000 записей
- 17. CloudKit CKRecordZone
- 18. Не может иметь более 100 записей в CloudKit
- 19. Есть ли ограничение на количество записей CKReferenced в CloudKit?
- 20. Получение текстов записей в CloudKit с RecordID Использование Swift
- 21. Захват записей CloudKit по имени и запросу в PHP
- 22. CloudKit
- 23. Экспорт в PDF не имеет записей
- 24. Изменения в CloudKit, отфильтрованные пользователем?
- 25. CloudKit: запрашивать индекс (recordID.recordName)
- 26. Сохранение CloudKit RecordID в CoreData
- 27. Apple CloudKit Paging
- 28. CloudKit и GameCenter в игре?
- 29. Удаление всех записей CloudKit каждый день из определенного типа записи
- 30. Некоторые вопросы о CloudKit
Знаете ли вы достаточно небольшое количество? – malhal
Да, запоздалый ответ; но хороший вопрос. Ваш лучший выбор и наиболее эффективное средство - использовать Активы. Сохраните все свои данные в большой объем данных и сохраните их в качестве актива. – user3069232
Лучше не использовать фиксированное «достаточно маленькое количество», поскольку оно может измениться в последующих версиях iOS –