7

以下は、クライアントから送信されたクラッシュ ログからコピー/貼り付けしたものです。それが何を意味するのか理解できません:s

どうやら、前の画面に戻るときにアプリがクラッシュしたようです (それはクライアントが報告したことです)。ここで UIWebDocumentView とは何ですか?

クラッシュを解決する必要がありますが、ここで立ち往生しているので、助けていただければ幸いです。

PS私はiphone sdk 3.0を使用しています。

Date/Time:       2009-09-29 18:16:28.458 -0400
OS Version:      iPhone OS 3.0 (7A341)
Report Version:  104

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

    Thread 4 Crashed:

        0   WebCore                         0x3588dd74 __ZL17_WebTryThreadLockb + 288
        1   WebCore                         0x3588e4c0 __ZL18_WebThreadAutoLockv + 52
        2   UIKit                           0x30aea484 -[UIWebDocumentView _responderForBecomeFirstResponder] + 8
        3   UIKit                           0x30978b34 -[UINavigationTransitionView transition:fromView:toView:] + 200
        4   UIKit                           0x30978a54 -[UINavigationTransitionView transition:toView:] + 24
        5   UIKit                           0x30974470 -[UINavigationController _startTransition:fromViewController:toViewController:] + 1604
        6   UIKit                           0x30973d90 -[UINavigationController _startDeferredTransitionIfNeeded] + 256
        7   UIKit                           0x309a7468 -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:] + 400
        8   UIKit                           0x309a72c8 -[UINavigationController popViewControllerAnimated:] + 32
        9   Snocell                         0x0002ae00 0x1000 + 171520
        10  Foundation                      0x30554062 -[NSThread main] + 42
        11  Foundation                      0x305023f2 __NSThread__main__ + 852
        12  libSystem.B.dylib               0x31d705a0 _pthread_body + 20
4

2 に答える 2

15

わかりました、私は解決策を見つけたと思います。他の誰かが同じ状況に陥った場合に備えて共有します。

EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS参照している仮想アドレスがページ テーブルにないか、アクセス権がないことを意味します。アクセスが許可されていない仮想アドレスです。あなたの例のアドレス アドレス 0x67696c69 の場合、これはポインターのように扱われたポインターではない可能性があります。または、ポインターを含むデータ構造が解放され、他のデータで上書きされました。

そして、ログのスタック トレースに WebCore が表示されます (WebCore は iPhone WebKit のコンポーネントです - http://en.wikipedia.org/wiki/WebKit#Components )

したがって、私がここで行っていたのは、UIWebView で Web サイトを表示し、完全にロードする前に、以前のビュー コントローラーに戻ってCRASHEDしたことです。

UIWebView は、解放する前にデリゲートをクリアする必要があることがわかりました。そうしないと、UIWebView を解放した後に Web 要求が完了すると、デリゲートへのコールバックが試行され、アプリケーションがクラッシュします。

解決策:ビューコントローラーをポップする前に次のコードを追加しましたが、現在は機能しています:)

if (webView.loading)
    [webView stopLoading];
webView.delegate = nil;
于 2009-10-05T11:11:19.270 に答える
0

以下は正しいアプローチになると思います。最初にデリゲートを nil に設定します。

webView.delegate = nil;
if (webView.loading)
    [webView stopLoading];
于 2016-09-16T09:14:37.427 に答える