Swift WKWebView сбой на didFailProvisionalNavigation

Мы сталкиваемся с прерывистым (иногда случается, на некоторых устройствах) крахом, что нам трудно сжимать и неспособны воспроизводить по требованию. Это связано с Swift 3 и компонентом WKWebView, в частности, сбой протокола обратного вызова при попытке получить код ошибки с помощью оператора switch. Смотри ниже:

func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { if let err = error as? URLError { switch(err.code) { // Exception occurs on this line case .cancelled: Hint(hide: true) case .cannotFindHost: Hint(hide: false, hint:.CannotFindHost) case .notConnectedToInternet: Hint(hide: false, hint: .NoInternet) case .resourceUnavailable: Hint(hide: false) case .timedOut: Hint(hide: false) default: Hint(hide: false) print("error code: " + String(describing: err.code) + " does not fall under known failures") } } } func Hint(hide: Bool, hint:SomeCustomEnum = SomeCustomEnum.Default) { //Dosomething with ui to let user know something bad happened } 

столбец ошибок указывает:

0 _BridgedStoredNSError.code.getter

1 _BridgedStoredNSError.code.getter

2 специализированных WebKitController.webView (WKWebView, didFailProvisionalNavigation: WKNavigation !, withError: Error) -> ()

3 @obj WebKitController.webView (WKWebView, didFailProvisionalNavigation: WKNavigation !, withError: Error) -> ()

Рассмотрение кода кажется таким, как будто оно должно быть эффективно освобождено от проблем, поскольку переменная err должна быть успешно опционально-распакована как действительный объект URLError к моменту выключения оператора switch. Оператору switch в этой точке должно быть гарантировано значение в err.code, поскольку .code не является обязательным для URLError.

Попытки искусственно вызвать ошибку, которая могла бы объяснить эту проблему, до сих пор не обеспечили много понимания. то есть. если я создаю собственную собственную ошибку без свойства кода, а затем попытаюсь использовать ее как URLError, она изящно выпадает из необязательного назначения.

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

Изучая сайт отправки Swift Bug ( https://bugs.swift.org ), я смог найти описание проблемы, т.е. Ошибка при нажатии на URLError может привести к отсутствию свойства .code:

https://bugs.swift.org/browse/SR-3879?jql=text%20~%20%22URLError%22

Это имеет ссылку на следующую ссылку, которая, кажется, является решением (все еще в процессе)

https://bugs.swift.org/browse/SR-3881

Эффективно URLError не хватает двух определений .code:

NSURLErrorAppTransportSecurityRequiresSecureConnection NSURLErrorDataLengthExceedsMaximum

Поэтому, если вы столкнулись с сбоем при привязке к свойству .code URLError, вы можете проверить его, выполнив приведение в NSError и проверку на свойство NSError .code.

Мы уменьшаем его с временным обходным решением до тех пор, пока ошибка не будет решена (ниже рассматриваются только ошибки NSURLErrorAppTransportSecurityRequiresSecureConnection (int -1022)):

 func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { let nserr = error as NSError if nserr.code == -1022 { Hint(hide: false, hint: .NSURLErrorAppTransportSecurityRequiresSecureConnection) } else if let err = error as? URLError { switch(err.code) { // Exception no longer occurs case .cancelled: Hint(hide: true) case .cannotFindHost: Hint(hide: false, hint:.CannotFindHost) case .notConnectedToInternet: Hint(hide: false, hint: .NoInternet) case .resourceUnavailable: Hint(hide: false) case .timedOut: Hint(hide: false) default: Hint(hide: false) print("error code: " + String(describing: err.code) + " does not fall under known failures") } } } func Hint(hide: Bool, hint:SomeCustomEnum = SomeCustomEnum.Default) { //Dosomething with ui to let user know something bad happened } 
  • Когда вызывается вызов navigationDelegate в WKWebView, если возникает ошибка?
  • Автозапуск видео HTML5 на iPhone
  • Запуск изображения на iOS изменяет размер
  • Webkit-overflow-scrolling: touch замораживает модальный контент с более длинным содержимым в IOS 10
  • Как отключить эффект прокрутки веб-страницы по умолчанию для iOS 'Safari?
  • Как поймать ошибки WebKit
  • HTML 5 Cache Manifest больше не работает в Chrome в МО
  • ios, webkit-overflow-scrolling: обнаружено распознавание касания в списке прокрутки
  • Отключить автоматический полноэкранный режим YouTube на iPhone
  • Пользовательский агент iOS для запроса рабочего стола
  • IOS stringWithContentsOfURL, возвращающий значение null
  • Interesting Posts

    Проверьте, существует ли значение для определенного ключа в массиве словарей в ios

    Создание приложения iOS моей программы Ionic AngularJS

    Сохранение файлов cookie для сохранения учетных данных для приложения iPhone

    Получение разрешения Отказано в ошибке при загрузке диспетчера loadFromPreferencesWithCompletionHandler

    accessibilityLabel названия UIViewController?

    Базовая аутентификация с использованием AFNetworking

    как просмотреть, но не редактировать изображение, выбранное с помощью UIImagePickerController в iOS

    Добавление subview, а затем сохранить его в верхней части приложения

    Как избежать ошибки ссылки на дубликаты символов iOS?

    Конвертировать GMT в IST в iOS

    Xamarin iOS AVPlayer – Как закодировать видео с помощью уведомления?

    Перенести запрос mysql в NSPredicate

    как получить сообщения пользователя и обновления от Google плюс, например, facebook

    Отображение MKAnnotation для настраиваемого объекта

    Показывать трафик, например, в приложении «Карты» из iphone с помощью MKMapView

    Давайте будем гением компьютера.