IOS: fetchRecordZoneChangesCompletionBlock не вызывается при отсутствии подключения к Интернету

Я использую CloudKit в своем приложении. Чтобы извлечь все изменения из iCloud, я использую операцию CKFetchRecordZoneChangesOperation. Когда я добавляю эту операцию, когда у меня нет активного интернет-соединения, fetchRecordZoneChangesCompletionBlock никогда не вызывается.

Я ожидаю, что этот блок завершения вызывается с ошибкой CKError.networkUnavailable.

Я использую Swift 3.

Я, вероятно, неправильно понимаю некоторые вещи. Может кто-нибудь объяснить, что мне не хватает?

1 ответ

Решение

CKOperation Документация

Объекты CKOperation имеют уровень качества обслуживания по умолчанию NSQualityOfServiceUtility. Операции на этом уровне считаются дискреционными и планируются системой на оптимальное время в зависимости от уровня заряда батареи и других факторов. На iPhone дискреционные действия приостановлены, когда включен режим низкого энергопотребления.

Что вам нужно сделать, это установить вручную CKFetchRecordZoneChangesOperationQoS to .userInitiated

// userInitiated: Used for performing work that has been explicitly requested by the user,
// and for which results must be immediately presented in order to allow for further user interaction.
// For example, loading an email after a user has selected it in a message list.
//
// set to userInitiated make sure the completion with error will immediately returned if currently no internet connection
zoneOperation.qualityOfService = .userInitiated
Другие вопросы по тегам