У меня возникли некоторые проблемы с MKMapView / аннотаций / UINavigationController. В принципе, я управлять мои взгляды, используя UINavigationController; один из моего взгляда содержит MKMapView и я добавлять аннотации на нем (10 до 200) с использованием метода addAnnotations.
Все работает отлично за исключением одной вещи: если я перемещаться «слишком быстро» на моем UINavigationController, на iphone симулятор аварий, получая «BAD ACCESS EXC» сигнал. Например, если я загрузить мой взгляд, содержащий MKMapView и немедленно нажмите кнопку «Назад» из UINavigationController панели навигации, я получаю сигнал. Я понял, что проблема была с помощью метода addAnnotations: когда мой MKMapView загружен, я добавить аннотации к нему, но это выглядит как все это делается асинхронно. Если я ждать, как за секунду до нажатия кнопки «Назад», я не получаю ошибки, но если я слишком быстро, он выходит из строя. Я не получаю сообщение об ошибке на всех, если я удалить строку addAnnotations. Я предполагаю, что это потому, что моя точка зрения освобождено UINavigationController ПЕРЕД метод addAnnotations получил работу.
Любое хорошее решение этой проблемы? Я не хочу, чтобы пользователь ждать (показывая вид нагрузки, например); я предполагаю, что решение может быть более эффективное управление памятью, но я не понимаю, как я мог бы сделать это.
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); }
На этом примере я получаю «Добавление меток: сделано» сообщение, прежде чем что-либо получить отображаются на карте.













