Сбои приложения, когда NavigationController активирован! - PullRequest
7 голосов
/ 02 октября 2009

Ниже приведено то, что я копирую / вставляю из Crash Log, отправленного клиентом. Я не могу понять, что это значит: s

По-видимому, это выглядит как сбой приложения при переходе на предыдущий экран (и это то, что сообщал клиент). Что такое UIWebDocumentView здесь?

Мне нужно разрешить аварию, но я застрял здесь, поэтому любая помощь высоко ценится.

P.S. Я использую 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

Ответы [ 2 ]

15 голосов
/ 05 октября 2009

Хорошо, я думаю, что нашел решение. Поделиться им на случай, если кто-то другой попадет в ту же ситуацию:

EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS означает, что виртуальный адрес, на который вы ссылаетесь, отсутствует в таблицах страниц или у вас нет доступа. Это виртуальный адрес, к которому у вас нет доступа. Для вашего примера адреса с адресом 0x67696c69 вполне вероятно, что это не тот указатель, который обрабатывается как указатель; или ваша структура данных, содержащая указатель, была свободна и перезаписана другими данными.

И затем я вижу WebCore в трассировке стека в журнале (WebCore - это компонент в iPhone WebKit - http://en.wikipedia.org/wiki/WebKit#Components)

Итак, что я делал здесь, выводил веб-сайт из UIWebView и, прежде чем он мог полностью загрузиться, возвращался к предыдущим контроллерам представления, и он CRASHED .

Я обнаружил, что UIWebView необходимо очистить свой делегат перед тем, как вы его отпустите; в противном случае, если веб-запрос завершается после освобождения UIWebView, он пытается перезвонить делегату и вызывает сбой приложения.

РЕШЕНИЕ: Я добавил следующий код перед отображением контроллера представления, и теперь он работает:)

if (webView.loading)
    [webView stopLoading];
webView.delegate = nil;
0 голосов
/ 16 сентября 2016

Я думаю, что следующий подход будет правильным. Сначала установите делегата на ноль.

webView.delegate = nil;
if (webView.loading)
    [webView stopLoading];
...