比較的安全な(私にとっては)修正が行われた後、アプリはいくつかのWebKitLegacyにクラッシュし始めました。私はFabricに多くのクラッシュを見ていますが、再現する安定したステップを見つけることはできません。 誰かがクラッシュを引き起こす可能性があることを知っていますか?付属の画像をご覧ください。iOS:WebKitLegacyがクラッシュする
一部のアプリケーション画面ではUIWebViewを使用してコンテンツを表示していますが、問題がどこかにあると想定しています。
比較的安全な(私にとっては)修正が行われた後、アプリはいくつかのWebKitLegacyにクラッシュし始めました。私はFabricに多くのクラッシュを見ていますが、再現する安定したステップを見つけることはできません。 誰かがクラッシュを引き起こす可能性があることを知っていますか?付属の画像をご覧ください。iOS:WebKitLegacyがクラッシュする
一部のアプリケーション画面ではUIWebViewを使用してコンテンツを表示していますが、問題がどこかにあると想定しています。
私の知る限り覚えているように、WebViewの更新(埋め込まれた画像から、例えば、応答)を受信したときに信号が現れたが、それを使用していないので、レンダリングすることができませんでしたもはやメインスレッドによって。つまり、ViewControllerが表示されていないときです。
このような場合は、負荷の高いWebページ(たとえば、オンラインの新聞http://edition.cnn.com/など)を読み込んで、読み込みを開始した直後に別のWebページをプッシュ/ポップすることで問題を再現できるようにする必要がありますViewController。それを修正する方法
は:確かに、あなたはあなたが言及したメソッドを呼び出す必要があります:webview.delegate = nil;
[webview stopLoading];
しかし、そうするための場所は決してdealloc
に、viewWillDisappear
方法です。理由は簡単です:viewWillDisappear
は、ViewControllerがメインスレッドの制御を失う直前に呼び出されます。ただし、VCがヒープに解放される直前に、dealloc
が呼び出されます。これは数秒後に起こり、アプリケーションにクラッシュする貴重な時間を与えたり、まったく呼び出されないことがあります。両方の方法を動かすと、そのトリックを行うべきです。
のWebビューを使用してビューコントローラは、他のビューコントローラをプッシュした場合、あなたはデリゲートたときにそのビューコントローラを失うことになるので、webview.delegate = nil' viewWillDisappear' 'に'の呼び出しに注意してくださいユーザーがWebビュー画面に戻ります。これを修正する一つの方法は、 'viewWillAppear'に' delegate'を再設定することです。 –
あなたは絶対的に正しいです:)明確化してくれてありがとう! – Bartserk
UIWebView EXC_BAD_Address ...アプリケーション受信信号 まず、webView.delegate = nilについて考える必要があります。 しかしどこ?
私の経験:
- (void)dealloc{
/*
Important
Before releasing an instance of UIWebView for which you have set a delegate,
you must first set the UIWebView delegate property to nil before disposing of the UIWebView instance.
This can be done, for example, in the dealloc method where you dispose of the UIWebView.
*/
if (_webView.loading) {
[self.webView stopLoading];
}
_webView.delegate = nil;
}
ViewController
は別ViewController
の子であるならば、あなたは のアニメーションで見る「ViewController
は親からのビュー」のViewController
の除去をトリガすることができます。同時に、 は、その親からViewController
を削除し、その参照を削除することができます。この時点ViewController
で **はWebViewのデリゲートがクリーンアップされません ** 使用のdeallocを意味し、は と呼ばれることはありませんはnilとviewWillDisappear
こととあなたのWebView
は常にクリーンアップされることを保証します。
その他の優れたあなたは何のiOSバージョンをターゲットにしている ios:EXC_BAD_ACCESS for Webview delegate
を結びますか? 'webview.delegate = nil'と' [webview stopLoading] 'をどこで呼びますか? – JAL
私はiOS7 +を対象としています。おそらく次のバージョンは8+です。 delegate = nilがdeallocで呼び出されます。 stopLoadingはviewWillDisappearで呼び出されます。 – Division
私はこれは、Appleからの公式溶液「のiOS 8へのアップグレード」することになります(iOSの7に登場したが、iOSの8で固定した)WebKitの内部バグであるかなり確信していますまた、私は 'viewWillDisapear'または' dealloc'でそれを呼び出してみてください、あなたは '' webview.delegate = nil'を呼んでいる場所に変更してみてくださいと '[WebViewのstopLoading]と思います。 – JAL