2016-05-13 7 views
1

Как правило, при выполнении GET или POST заезжает прошивку с использованием dataTaskWithRequest или sendAsynchronousRequest мы используем, чтобы столкнуться ошибки, связанные с сетевыми кодами ошибок, как,Error Domain = NSURLErrorDomain Code = -1004 в Swift службы вместо -1009 называет

  • NSURLErrorNotConnectedToInternet = -1009
  • NSURLErrorCannotConnectToHost = -1004
  • NSURLErrorTimedOut = -1001

В моем случае я буду отсоединении Интернет и выполнение служебных вызовов. Таким образом, ожидаемый код ошибки: «NSURLErrorNotConnectedToInternet = -1009». Но, его метания «NSURLErrorCannotConnectToHost = -1004», как показано ниже,

Error Domain=NSURLErrorDomain Code=-1004 "Could not connect to the 
server." UserInfo=0x1700f0e00 {NSUnderlyingError=0x170255e70 "The 
operation couldn’t be completed. (kCFErrorDomainCFNetwork error 
-1004.)", NSErrorFailingURLStringKey=https://example.com/reg, 
NSErrorFailingURLKey=https://example.com/reg, _kCFStreamErrorDomainKey=1, 
_kCFStreamErrorCodeKey=51, NSLocalizedDescription=Could not connect to the server.} 

Итак, как получить точное состояние ошибки при использовании dataTaskWithRequest или sendAsynchronousRequest.

ответ

1

Как правило, IIRC, операционная система посылает «не подключена к Интернету» только в двух ситуациях:

  • сеть определяется как нефункциональные после:
    • один или несколько запросов URL не в состоянии и
    • ОС пытается исследовать известный URL пленница-портал обнаружения и
    • Этот запрос также не
  • Нет интерфейс не имеет IP-адрес
    • В том числе подключенных сетей VPN
    • Исключая петлевой интерфейс

вверх, пока система не достигнет этого состояния, неудачи вы видите будет «не может подключиться на хостинг ", потому что это все ОС знает наверняка.

Как правило, ваше приложение должно интерпретировать их одинаково - с помощью достижимости, чтобы определить, когда нужно повторить попытку, а затем повторить попытку, когда изменение достижимости.