Sto avendo qualche problema con MKMapView / annotazioni / UINavigationController. Fondamentalmente, io gestisco le mie opinioni con un UINavigationController; uno dei mio punto di vista contiene un MKMapView E aggiungo annotazioni su di esso (da 10 a 200) utilizzando il metodo addAnnotations.
Tutto funziona bene, tranne che per una cosa: se io navigare troppo veloce sul mio UINavigationController, si blocca il simulatore di iPhone, la ricezione di un segnale EXC BAD ACCESS. Ad esempio, se io carico il mio contenente l'MKMapView e subito si preme il pulsante Indietro dalla barra di navigazione UINavigationController, ottengo il segnale. Ho pensato che il problema era con il metodo addAnnotations: quando il mio MKMapView viene caricato, ho aggiungere annotazioni ad esso, ma sembra che tutto è fatto in modo asincrono. Se aspetto come un secondo prima di premere il pulsante Indietro, ottengo nessun errore, ma se io sono troppo veloce, si blocca. Ottengo nessun errore affatto se rimuovo la linea addAnnotations. Credo che sia perché il mio punto di vista è rilasciato dalla UINavigationController prima che il metodo addAnnotations ottenuto il lavoro fatto.
Qualsiasi buona soluzione a questo? Non voglio l'utente di attendere (visualizzazione di una vista di carico, per esempio); Credo che la soluzione potrebbe essere una migliore gestione della memoria, ma non vedo come potrei fare questo.
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); }
Su questo esempio, ottengo le segnaposto Aggiunta: fatto un messaggio prima di tutto ottenere visualizzata sulla mappa.













