29

あるiPhoneアプリのクラッシュレポートをiTunesConnectからダウンロードしました。最も一般的なクラッシュには、次のような痕跡があります。

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0xa1b1c1db
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                 0x3030e6f4 objc_msgSend + 16
1   UIKit                           0x30ebebee -[UIWebView webView:resource:didFinishLoadingFromDataSource:]
2   UIKit                           0x30ebe5ca -[UIWebViewWebViewDelegate webView:resource:didFinishLoadingFromDataSource:]
3   CoreFoundation                  0x32b73b5c __invoking___ + 60
4   CoreFoundation                  0x32bc67be -[NSInvocation invoke]
5   WebCore                         0x320baa86 HandleDelegateSource
6   CoreFoundation                  0x32bb8a96 CFRunLoopRunSpecific
7   CoreFoundation                  0x32bb8356 CFRunLoopRunInMode
8   GraphicsServices                0x30544cd4 GSEventRunModal
9   GraphicsServices                0x30544d80 GSEventRun
10  UIKit                           0x30d2c768 -[UIApplication _run]
11  UIKit                           0x30d2b46c UIApplicationMain

これはUIWebViewの内部の問題であり、対処できる範囲外の問題であると約80%確信しています。この問題を絞り込んで、OSとUIWebViewの問題なのか、コードで修正して対処できる問題なのかを特定するための提案はありますか?前もって感謝します。

更新:問題のUIWebViewは、ユーザーが対応するナビゲーションコントローラーの戻るボタンを押すと解放されるビューにあります。受け入れられた解決策は、このエラーが発生している理由の良い説明を提供しているようです。

提案された解決策の前に:

- (void)dealloc {
    [webView release];

    [super dealloc];
}

提案された解決策の後:

- (void)dealloc {
    webView.delegate = nil;
    [webView stopLoading];
    [webView release];

    [super dealloc];
}
4

5 に答える 5

66

シナリオは次のようになります。

  1. ユーザーは。で画面に入りますUIWebView。デリゲートとしてのUIViewControllerセットself
  2. Webページのダウンロードが開始されます
  3. ユーザーは画面
    3aを終了します。UIViewController割り当てが解除されます
  4. UIWebViewロードを終了し、「終了しました」というメッセージをデリゲートに送信します。

デリゲートの割り当てを解除する前に、ページのロードを停止しUIWebView、デリゲートをnilに設定する必要があります。

于 2009-10-05T15:34:47.787 に答える
4

それはあなたのコードのほぼ100%のエラーです。iPhone SDKのエラーは非常にまれであり、UIWebView他の多くの開発者によって非常によくテストされています。

EXC_BAD_ACCESS通常、すでにリリースされているオブジェクトにアクセスしようとしたときに発生します。明らかに、Appleのコードがそれを行おうとしているのなら、あなたはオブジェクトを間違ってリリースした人です。持っていない、-autoreleaseまたは-release多すぎないのですか?

于 2009-10-05T15:13:36.810 に答える
1

最近、アプリがランダムにクラッシュするという同様の問題が発生しました。onclick=ロードされたHTMLで「」を使用することに問題があったことが判明しました。

onclickをシンプルに置き換えれば<a href="javascript:some_script">、問題は解決しました。

これがで同じ問題を経験している他の人に役立つことを願っていますwebviews

于 2016-11-10T12:47:28.097 に答える
0

UIWebViewDelegateプロトコルを実装しているコードの内容を詳しく調べてください。特に、処理されているものを確認する必要がありwebViewDidFinishLoad: ます。リリースされた変数にアクセスしようとしています。可能であれば、完全なソースを投稿してください。それは私たちがあなたのためにそれを見つけるのに役立ちます。

于 2009-10-05T15:21:25.297 に答える
0

私も同様の問題を抱えていました。私が使用していたもの:

 [webView loadHTMLString:str baseURL:tmpUrl];

 [str release];

「str」のリリースにより、エラーメッセージ「EXC_BAD_ACCESS」が発生しました

于 2009-12-28T18:12:25.987 に答える