Ik heb een probleem met MKMapView / annotaties / UINavigationController. Kortom, ik beheer mijn uitzicht op het gebruik van een UINavigationController; een van mijn weergave bevat een MKMapView en ik aantekeningen op het toevoegen (10 tot 200) met behulp van de addAnnotations methode.
Alles werkt boete behalve één ding: als ik navigeren te snel op mijn UINavigationController, de iPhone simulator crashes, het ontvangen van een EXC BAD ACCESS signaal. Bijvoorbeeld, als ik laad mijn ogen met het MKMapView en meteen druk op de Back knop van de UINavigationController navigatiebalk, krijg ik het signaal. Ik dacht dat het probleem was met de addAnnotations methode: als mijn MKMapView is geladen, ik aantekeningen toe te voegen, maar het lijkt erop dat alles asynchroon wordt gedaan. Als ik wacht als een seconde voordat het indrukken van de knop Terug, krijg ik geen fout, maar als ik te snel, het crasht. Ik krijg geen fout helemaal als ik verwijder de addAnnotations lijn. Ik denk dat het komt omdat mijn opvatting wordt vrijgegeven door de UINavigationController VOOR de addAnnotations methode kreeg de klus te klaren.
Elke goede oplossing voor dit? Ik wil niet dat de gebruiker om te wachten (het weergeven van een laad- uitzicht bijvoorbeeld); Ik denk dat de oplossing is misschien een beter geheugenbeheer zijn, maar ik zie niet hoe ik dit kon doen.
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); }
Op dit voorbeeld, krijg ik de plaatsmarkeringen toevoegen: gedaan bericht voordat er iets te krijgen op de kaart weergegeven.













