Ich habe ein Problem mit MKMapView / Anmerkungen / UINavigationController. Im Grunde genommen, ich verwalten meine Ansichten, die eine UINavigationController verwenden; eine meiner Ansicht enthält einen MKMapView und i Annotationen auf sie (10 bis 200), um die addAnnotations Methode.
Alles funktioniert gut, außer für eine Sache: Wenn ich „zu schnell“ auf meinem UINavigationController navigieren, dem iPhone Simulator abstürzt, ein „EXC BAD ACCESS“ Signal empfängt. Zum Beispiel, wenn ich meine Ansicht lade die MKMapView und sofort drücken Sie die Schaltfläche „Zurück“ aus der UINavigationController Navigationsleiste enthält, erhalte ich das Signal. Ich dachte ich, dass das Problem mit der addAnnotations Methode war: wenn mein MKMapView geladen wird, i Anmerkungen hinzufügen, um es, aber es sieht aus wie alles asynchron erfolgt. Wenn ich wie eine zweite warten, bevor die Schaltfläche „Zurück“ drücken, erhalte ich keinen Fehler, aber wenn ich zu schnell bin, stürzt es. Ich bekomme keinen Fehler überhaupt, wenn ich die addAnnotations Linie entfernen. Ich denke, es ist, weil meiner Ansicht nach durch die UINavigationController freigegeben wird, bevor die addAnnotations Methode den Job zu erledigen habe.
Jede gute Lösung für dieses? Ich will nicht der Benutzer warten (eine Lade Ansicht zum Beispiel der Anzeige); Ich denke, die Lösung könnte eine bessere Speicherverwaltung sein, aber ich sehe nicht, wie ich dies tun könnte.
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); }
An diesem Beispiel habe ich die „Hinzufügen von Ortsmarken: done“ -Meldung, bevor irgendetwas auf der Karte angezeigt bekommen.













