Tengo un problema con MKMapView / annotations / UINavigationController. Básicamente, administro mis vistas usando un UINavigationController; una de mis vistas contiene una MKMapView y agrego anotaciones en ella (de 10 a 200) usando el método addAnnotations.
Todo funciona bien, excepto por una cosa: si navego demasiado rápido en mi UINavigationController, el simulador de iphone se bloquea y recibe una señal de EXC BAD ACCESS. Por ejemplo, si cargo mi vista que contiene MKMapView e inmediatamente presiono el botón Atrás desde la barra de navegación UINavigationController, obtengo la señal. Pensé que el problema era con el método addAnnotations: cuando mi MKMapView está cargado, le agrego anotaciones, pero parece que todo se hace de forma asíncrona. Si espero un segundo antes de presionar el botón Atrás, no obtengo ningún error, pero si soy demasiado rápido, se bloquea. No obtengo ningún error si elimino la línea addAnnotations. Supongo que es porque el UINavigationController lanzó mi vista ANTES de que el método addAnnotations hiciera el trabajo.
¿Alguna buena solución para esto? No quiero que el usuario espere (mostrando una vista de carga, por ejemplo); Supongo que la solución podría ser una mejor gestión de la memoria, pero no veo cómo podría hacer esto.
if(DEBUG_MODE) { NSLog(@Creating array of placemarks : begin); }
self.placemarkCache = [[NSMutableArray alloc] init];
// Loading placemarks for a placemark dictionary
NSArray *sortedKeys = [[self.placemarkDictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];
for (id key in sortedKeys) {
MyPlacemark *currentPlacemark = [self.placemarkDictionary objectForKey:key];
[self.placemarkCache addObject:currentPlacemark];
[currentPlacemark release];
}
if(DEBUG_MODE) { NSLog(@Creating array of placemarks : done); }
if(DEBUG_MODE) { NSLog(@Adding placemarks : begin); }
[self.mapView addAnnotations:self.placemarkCache];
if(DEBUG_MODE) { NSLog(@Adding placemarks : done); }
En este ejemplo, aparece el mensaje Agregar marcas de posición: hecho antes de mostrar nada en el mapa.













