CloudKit CKdatabaseOperation не выдает ошибку в симуляторе в зависимости от настройки.qualityOfService

Я в основном возиться с CloudKit. У меня есть 2 вопроса, с которыми я хотел бы получить помощь / образование.

(1) Когда я пытаюсь запустить следующий код в симуляторе с выключенным WiFi (для имитации недоступности сети), я ожидаю, что он выдаст ошибку недоступности сети. Однако cloudKit не выдает никакой ошибки, и функция также ничего не делает, то есть не выполняет ни одного из операторов print внутри modifyRecordZonesCompletionBlock

self.container = CKContainer.default()
self.privateDB = self.container.privateCloudDatabase
let createZoneGroup = DispatchGroup()

createZoneGroup.enter()

let createZoneOperation = CKModifyRecordZonesOperation(recordZonesToSave: [customZone], recordZoneIDsToDelete: [])

createZoneOperation.modifyRecordZonesCompletionBlock = { (saved, deleted, error) in
if let theerror = error {
// Need to handle error
    print("Create Custom zone error \(theerror)")
} else {
    print("Custom Zone created")
}
    createZoneGroup.leave()
}

createZoneOperation.qualityOfService = .background
self.privateDB.add(createZoneOperation)

Тем не менее, когда я меняю createZoneOperation.qualityOfService в default или же userInitiatedзатем он выдает ошибку (ниже), которая является ожидаемым поведением. Почему это? Это просто аномалия симулятора или выбрасывание ошибок облачного набора связано с качеством работы сервиса и почему? Я не могу найти никакой информации в API-интерфейсе Cloudkit для этого поведения.

Create Custom zone error <CKError 0x60800005a2e0: "Partial Failure" (2/1011); "Failed to modify some record zones"; partial errors: {
    Main:__defaultOwner__ = <CKError 0x610000242910: "Network Unavailable" (3/NSURLErrorDomain:-1009); "The Internet connection appears to be offline.">
}>

(2) Кроме того, я ожидал, что Network Unavailableошибка, а не Partial Failureошибка с ошибкой Network Unavailable ошибка внутри него. Это ожидаемое поведение? Всегда ли это бросить Partial Failure ошибка, а затем должен быть развернут, чтобы найти содержащие сообщения об ошибках? Документация, кажется, невероятно не хватает объяснения, если я не смог найти в нужном месте.

Любая помощь будет очень высоко ценится. Спасибо.

1 ответ

Решение

Я хочу ответить на оба вопроса...

сеть

Там нет ошибки или проблемы симулятора, вы не получаете сообщение об ошибке подключения, потому что качество обслуживания.background означает...

Система выполняет работу, инициированную пользователем, раньше, чем фоновая работа, которую можно отложить до более оптимального времени.

Возможно, именно поэтому вы не получаете сообщение об ошибке, потому что система ожидает улучшения состояния сети, в то время как вы устанавливаете.default или.userInitiate, чтобы система ожидала ответа "в реальном времени".

Цитата из Руководства по энергоэффективности для приложений iOS

Для моделирования условий сети лучше использовать инструмент Network Link Conditioner от Apple. Здесь вы можете найти больше информации об этом.

Частичная ошибка

Я не уверен в этом, но я думаю, что Partial Failure является общей оболочкой для всех результатов ошибки CKxxxxxOperation.

Это имеет смысл, потому что эти операции включают в себя 1..N CKRecords, и некоторые из них могут завершиться нормально, а другие могут завершиться с ошибкой

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