私たちは、断続的な(一部のデバイスでは、時々起こります)クラッシュして、苦労してオンデマンドを再現することができません。これはSwift 3とWKWebViewコンポーネントに関連しています。具体的には、switchステートメントでエラーコードを取得しようとすると、そのコールバックプロトコルがクラッシュします。以下を参照:Swift WKWebViewクラッシュ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:エラー) - >()
...
変数errが成功し、必要に応じて、開封されたようでなければなりませんので、それは問題から効果的に自由であるべきかのように思えるのコードの確認switch文が呼び出されるまでに有効なURLErrorオブジェクトURLErrorでは.codeはオプションではないので、その時点でのswitchステートメントはerr.codeの値を保証する必要があります。
人為的に問題を説明する可能性のあるエラーを引き起こそうとする試みは、これまで多くの洞察を提供していません。すなわち、コードプロパティなしで独自のカスタムエラーを作成し、それをURLErrorとしてキャストしようとすると、オプションの割り当てがうまく機能しなくなります。
回転する、またはさらにトラブルシューティングするための助力や提案は高く評価されますが、その間に一貫して再現しようとしています。
よく書かれた質問:バグが解決されるまで、我々は一時的な回避策とそれを軽減している
(下にはNSURLErrorAppTransportSecurityRequiresSecureConnection(int型-1022)タイプの障害に対処し)。あなたが所有しているサーバー上のURLにアクセスしていますか?もしそうなら、あなたのアプリでクラッシュの原因となっている可能性のあるエラーについて、サーバーログから何か洞察が得られますか? –
それは素晴らしい提案でしたが、私の大学は私がそれに到達する前に再現することができました。再現は、デフォルトで(任意の負荷を許可する)モードのアプリ転送セキュリティを持つ「http」URLで簡単にナビゲートすることです。これにより問題を回避することはできますが、URLErrorへのキャストに基づいて、.codeプロパティを含まないバグを送信します。 – Glorifundel