Jeg har noen problem med MKMapView / merknader / UINavigationController. I utgangspunktet, jeg klarer mine synspunkter ved hjelp av en UINavigationController; en av min inneholder en MKMapView og jeg legge merknader på den (10 og 200) ved hjelp av addAnnotations metode.
Alt fungerer fint bortsett fra én ting: Hvis jeg navigere for fort på min UINavigationController, iPhone simulator krasjer, får en EXC BAD ACCESS signal. For eksempel, hvis jeg legger mitt syn inneholder MKMapView og gjenoppbygger trykk på Back -knappen fra UINavigationController navigasjonslinjen, jeg får signal. Jeg skjønte at problemet var med addAnnotations metode: når min MKMapView er lastet, jeg legge til kommentarer til det, men det ser ut som alt er gjort asynkront. Hvis jeg vente som et sekund før å trykke på Tilbake -knappen, jeg får ingen feil, men hvis jeg er for fort, det krasjer. Jeg får ingen feil i det hele tatt hvis jeg fjerner addAnnotations linje. Jeg antar det er fordi min oppfatning er utgitt av UINavigationController FØR addAnnotations metoden fikk jobben gjort.
Enhver god løsning på dette? Jeg ønsker ikke brukeren å vente (som viser en laste visning for eksempel); Jeg antar at løsningen kan være en bedre minnehåndtering, men jeg ser ikke hvordan jeg kunne gjøre dette.
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); }
På dette eksempelet jeg få Legge til stedsmarkeringene: gjort melding før noe blir vist på kartet.













