2010-03-25 11 views
7

Tengo un error donde mi aplicación se colgó "EXC_BAD_ACCESS" cuando presioné la tecla "Atrás" en la barra de navegación y la vista se descargó que tenía un MapKit (mapView) y utilicé el Administrador de ubicación. Intentado durante días para corregir el error y, finalmente, se le ocurrió una solución para cualquier persona que se encuentra con este problema:MapKit/Location Manager bloquea la aplicación al descargar view

añadir este código a su dealloc

- (void)dealloc { 
    mapView.delegate = nil; 
    locationManager.delegate = nil; 

    [mapView release]; 
    [locationManager release]; 
} 
+0

Gracias, hombre! Lo extraño es que no puedes reproducirlo en el simulador. –

+0

Proporcione más detalles de implementación. Parece algo obj. ya está lanzado. Por cierto, es una buena costumbre anular al delegado en dealloc. – kompozer

+0

Sin ver los registros de fallos realmente no puede decir. Pero parece que estás liberando algo dos veces. intente agregar NSZombieEnabled, esto le dirá si está tratando de acceder a algo en la memoria que ya ha sido liberado. – CW0007007

Respuesta

0

que tenía éste también, :) Y, sí , esta solución es en realidad una solución adecuada;

- (void)dealloc { 
    mapView.delegate = nil; 
    locationManager.delegate = nil; 

    [mapView release]; 
    [locationManager release]; 
} 

Lo que sucede detrás de las escenas es la siguiente:

  1. Le pegó a la tecla BACKtambién. Esto se descarga y en consecuencia libera el controlador que contiene MapView. Como es muy probable que haya una sola referencia al controlador, será desasignado en ese momento.

  2. El locationManager, sin embargo, es bastante probable que todavía se haga referencia en algún lugar en el funcionamiento interno de geoposicionamiento.

  3. Si el locationManager y/o mapView ahora envían una notificación a su delegado respectivo, están siguiendo un puntero no válido. Lo cual dará como resultado una excepción EXC_BAD_ACCESS.

Sí: nilling delegates que apuntan a sí mismos siempre es una buena idea. Justed deseó que Apple agregara algo de automagia allí.

Cuestiones relacionadas