MapKit / Administrador de ubicaciones aplicación se bloquea al descargar vista

votos
7

I tiene un error en mi aplicación se estrelló EXC_BAD_ACCESS cuando pulso la tecla de nuevo en mi barra de navegación y la vista sin carga que tenía un MapKit (MAPview) y utiliza el Administrador de ubicaciones. 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:

Añadir este código a su dealloc

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

    [mapView release];
    [locationManager release];
}
Publicado el 25/03/2010 a las 05:08
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Tenía éste también, :) Y sí, esta correcció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. De llegar a la tecla BACKtambién. Esto descarga y, en consecuencia, libera el controlador que mantiene el MapView. Como no ha sido bastante probable que sólo una sola referencia al controlador será dealloc'ed entonces.

  2. El locationManager, sin embargo, es bastante probable que todavía hace referencia alguna parte en el funcionamiento interno de geoposicionamiento.

  3. Si el locationManager y / o MAPview ahora enviar una notificación a su respectivo delegado, que están siguiendo un puntero no válido. Que dará lugar a una excepción de EXC_BAD_ACCESS.

Sí: nilling delegados que apuntan a uno mismo es siempre una buena idea. Me hubiera gustado justed Apple podría añadir un poco de automagic allí.

Respondida el 18/02/2012 a las 15:04
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more