Почему следующий код заставляет URLSession
возвращать nil
как для data
, так и для error
?
let task = URLSession.shared.dataTask(with: storeRequest as URLRequest) { data, _, error -> Void in
// there is an error
if let networkError = error {
print("There was a network error")
return
}
// there is no data
guard let safeData = data else {
print("No network error, but no data either")
return
}
...
При запуске этого кода один пользователь попадает в строку No network error, but no data either
.
Согласно документам Apple на URLSession.dataTask
:
Если запрос завершается успешно, параметр данных блока обработчика завершения содержит данные ресурса, а параметр ошибки равен нулю. Если запрос не выполняется, параметр данных равен нулю, а параметр ошибки содержит информацию об ошибке.
Я прочитал это так: либо data
, либо error
всегда должны быть отличными от нуля. Но, похоже, здесь этого не происходит. В какой ситуации оба значения равны нулю?
(Если помогает - рассматриваемый URL-адрес - это API проверки квитанции iTunes по адресу https://buy.itunes.apple.com/verifyReceipt, а затронутые пользователи - обозреватели в Apple, которые обычно не хотят помогать в отладке. Этот код на самом деле является частью SwiftyStoreKit и вызывает ошибку SwiftyStoreKit.ReceiptError error 1
для проверяющего, но никогда для кого-либо еще. .)