Мы сталкиваемся с прерывистым (иногда случаем на некоторых устройствах) сбоем, что нам трудно сжимать и неспособны воспроизводить по требованию. Это связано с Swift 3 и компонентом WKWebView, в частности, сбой протокола обратного вызова при попытке получить код ошибки с помощью оператора switch. смотри ниже:Swift WKWebView crash on didFailProvisionalNavigation
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, didFailProvisionalNavigat ион: WKNavigation !, withError: Error) ->()
...
Просмотр кода, кажется, как будто это должно быть эффективно свободным от проблем, так как переменная ERR должна быть успешно необязательно развернутой как действительный объект URLError к моменту выключения оператора switch. Оператору switch в этой точке должно быть гарантировано значение в err.code, поскольку .code не является обязательным для URLError.
Попытки искусственно вызвать ошибку, которая может объяснить проблему, до сих пор не обеспечили много понимания. то есть. если я создаю собственную собственную ошибку без свойства кода, а затем попытаюсь использовать ее как URLError, она изящно выпадает из необязательного назначения.
Любая помощь или предложения по возобновлению или даже дальнейшему устранению неполадок приветствуется, и в то же время будет продолжаться попытка воспроизводить на постоянной основе.
Хорошо написанный вопрос. Получаете ли вы доступ к URL-адресам на своих серверах? Если да, то журналы сервера дают какое-либо представление об ошибке, которая может вызвать сбои в вашем приложении? –
Это было отличное предложение, но колледж мой смог воспроизвести, прежде чем я смог добраться до него. Воспроизведение - просто ориентироваться с URL-адресом «http» с безопасностью транспорта приложений по умолчанию (разрешить произвольные нагрузки = нет). Хотя это позволяет нам обойти проблему, я буду отправлять ошибку, основанную на приведении в URLError, которая не содержит свойство .code. – Glorifundel