IOS: fetchRecordZoneChangesCompletionBlock не вызывается при отсутствии подключения к Интернету
Я использую CloudKit в своем приложении. Чтобы извлечь все изменения из iCloud, я использую операцию CKFetchRecordZoneChangesOperation. Когда я добавляю эту операцию, когда у меня нет активного интернет-соединения, fetchRecordZoneChangesCompletionBlock никогда не вызывается.
Я ожидаю, что этот блок завершения вызывается с ошибкой CKError.networkUnavailable.
Я использую Swift 3.
Я, вероятно, неправильно понимаю некоторые вещи. Может кто-нибудь объяснить, что мне не хватает?
1 ответ
Объекты CKOperation имеют уровень качества обслуживания по умолчанию NSQualityOfServiceUtility. Операции на этом уровне считаются дискреционными и планируются системой на оптимальное время в зависимости от уровня заряда батареи и других факторов. На iPhone дискреционные действия приостановлены, когда включен режим низкого энергопотребления.
Что вам нужно сделать, это установить вручную CKFetchRecordZoneChangesOperation
QoS 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