Приложение вылетает, когда NavigationController выталкивается!
ниже я копирую / вставляю из журнала сбоев, отправленного клиентом. Я не могу понять, что значит :с
по-видимому, похоже, что приложение разбилось при переходе к предыдущему экрану (и это то, что сообщил клиент). Что такое 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 ответов
хорошо, я думаю, что нашел решение. Поделиться им в случае, если кто-то другой попадает в ту же ситуацию:
EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS
означает, что виртуальный адрес вы refererencing не в таблицы страниц или у вас нет доступа. Это виртуальный адрес, доступ к которому запрещен. Для вашего примера адрес адреса 0x67696c69 вероятно, что это то, что не является указателем, который рассматривался как указатель; или ваша структура данных, содержащая указатель, была свободной и перезаписаны другими данными.
и, затем я вижу WebCore в трассировке стека в журнале (WebCore является компонентом в iPhone WebKit - http://en.wikipedia.org/wiki/WebKit#Components)
Итак, что я делал здесь, диспалируя веб-сайт в UIWebView и до того, как он смог полностью загрузить, возвращаясь к предыдущим контроллерам просмотра, и это врезался.
я обнаружил, что UIWebView должен очистить свой делегат до вы освобождаете его; в противном случае, если веб-запрос завершается после освобождения UIWebView, он пытается перезвонить делегату и вызывает сбой приложения.
устранение: я добавил следующий код перед появлением контроллера вида, и он работает сейчас:)
if (webView.loading)
[webView stopLoading];
webView.delegate = nil;
Я думаю, что следующий подход будет правильным. Сначала установите для делегата значение nil.
webView.delegate = nil;
if (webView.loading)
[webView stopLoading];