7

A continuación se muestra lo que copié/pegué desde el Crash Log enviado por el cliente. No puedo entender lo que significa eso: s¡La aplicación se cuelga cuando NavigationController aparece!

Aparentemente parece que la aplicación se bloqueó al navegar de vuelta a una pantalla anterior (y eso es lo que el cliente ha informado). ¿Qué es UIWebDocumentView aquí?

Necesito resolver el fallo, pero estoy atascado aquí por lo que cualquier ayuda es muy apreciada.

P.S. Estoy usando 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 
+1

Bien, supongo que encontré la solución. Compartirlo en caso de que alguien abandone aquí: EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS significa que la dirección virtual a la que hace referencia no está en las tablas de páginas o no tiene acceso. Es una dirección virtual a la que no tiene acceso. Para su dirección de dirección de ejemplo 0x67696c69 es probable que esto sea algo que no sea un puntero que haya sido tratado como un puntero; o su estructura de datos que contiene el puntero fue liberada y sobrescrita con otros datos. Y, luego veo WebCore en el registro, un componente en iPhone WebKit (http://bit.ly/4j4WsN) –

+1

Entonces, lo que estaba haciendo aquí, mostrando un sitio web en UIWebView y antes de que pudiera cargarse por completo, apareciendo volver a los controladores de vista anterior y se estrelló. Descubrí que UIWebView necesita tener su delegado despejado antes de lanzarlo; de lo contrario, si se completa una solicitud web después de liberar UIWebView, intenta volver a llamar al delegado y hace que la aplicación se cuelgue. SOLUCIÓN: agregué "myWebView.delegate = nil;" antes de mostrar el controlador de vista y está funcionando ahora :) –

+1

Estaba teniendo un problema similar - webView.delegate = nil lo resolvió, al igual que para usted. –

Respuesta

15

Bien, supongo que encontré la solución. Compartirlo en caso de que alguien más entre en la misma situación:

EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS significa que la dirección virtual a la que hace referencia no está en las tablas de páginas o no tiene acceso. Es una dirección virtual a la que no tiene acceso. Para su dirección de dirección de ejemplo 0x67696c69 es probable que esto sea algo que no sea un puntero que haya sido tratado como un puntero; o su estructura de datos que contiene el puntero fue liberada y sobrescrita con otros datos.

Y, entonces veo WebCore en el seguimiento de la pila en el registro (WebCore es un componente en iPhone WebKit - http://en.wikipedia.org/wiki/WebKit#Components)

Por lo tanto, lo que estaba haciendo aquí, dispalying un sitio web en UIWebView y antes de que podría cargarse por completo, regresando a los controladores de vista anteriores y CRASHED.

Descubrí que UIWebView necesita tener su delegado borrado antes de lanzarlo; de lo contrario, si se completa una solicitud web después de liberar UIWebView, intenta volver a llamar al delegado y hace que la aplicación se cuelgue.

SOLUCIÓN: I añade el siguiente código antes de hacer estallar controlador de vista y está funcionando ahora :)

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

Esta corrección no funcionó para mí (aunque estaba probando un iPhone 2G antiguo). Acabo de eliminar la llamada popViewController en su lugar. No es la solución más inteligente pero funciona, y de alguna manera es más lógica. –

+0

Resultó que la eliminación de la instrucción popViewController también solucionó otros problemas. Creo que es mejor no llamar a popViewController en el método didFailLoadWithError. –

+0

Gracias, fue útil para saber darme la dirección correcta para investigar – 2cupsOfTech

0

creo que el siguiente será un enfoque correcto. Establezca el delegado en nil primero.

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