Mam pewien problem z MKMapView / adnotacji / UINavigationController. Zasadniczo udaje mi moje poglądy za pomocą UINavigationController; jeden z moim zdaniem zawiera MKMapView i dodawać adnotacje na niej (10 do 200), stosując metodę addAnnotations.
Wszystko działa poprawnie z wyjątkiem jednej rzeczy: jeśli nawigacja „zbyt szybko” na moim UINavigationController, wywala symulatora iPhone, odbierania sygnału „EXC BAD access”. Na przykład, jeśli mogę załadować mój pogląd zawierający MKMapView i natychmiast nacisnąć przycisk „Wstecz” na pasku nawigacyjnym UINavigationController, pojawia się sygnał. Pomyślałem, że problem był z metodą addAnnotations: kiedy moja MKMapView jest załadowany, i dodawanie adnotacji do niego, ale wygląda na to wszystko odbywa się asynchronicznie. Jeśli mogę się doczekać jak sekund przed naciśnięciem przycisku „Wstecz”, otrzymuję żadnego błędu, ale jeśli jestem zbyt szybki, to wywala. Mam żadnego błędu w ogóle, jeśli usunąć wiersz addAnnotations. Myślę, że to dlatego, że mój pogląd jest wydany przez UINavigationController PRZED metoda addAnnotations swoją robotę.
Każdy dobry Rozwiązaniem tego problemu? Nie chcę użytkownikowi czekać (wyświetlanie widoku ładowania na przykład); Myślę, że rozwiązaniem mogłoby być lepsze zarządzanie pamięcią, ale nie widzę w jaki sposób można to zrobić.
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); }
Na tym przykładzie, otrzymuję „Dodawanie oznaczeń miejsc: done” wiadomość, zanim cokolwiek się wyświetlane na mapie.













