У меня есть ViewController (с MKMapView), который продвинут в из-за NavigationController. Таким образом, у меня есть NavBar с "задней" кнопкой. Нажимая ту кнопку "Назад", я получаю ошибку:
11.01.2010 18:05:35.273 TestApp [147:207] экземпляр 0x1758f0 класса MKUserLocation освобождается, в то время как наблюдатели значения ключа все еще регистрируются в нем. Информация о наблюдении пропускается и может даже стать по ошибке присоединенной к некоторому другому объекту. Установите точку останова на NSKVODeallocateBreak для остановки здесь в отладчике. Вот текущая информация о наблюдении: (Контекст: 0x0, Свойство: 0x17d600>), Программа получила сигнал: “EXC_BAD_ACCESS”.
Мне реализовали viewDidLoad метод с Наблюдателем:
- (void)viewDidLoad {
mapView = (MKMapView*)self.view;
mapView.delegate = self;
mapView.mapType = MKMapTypeHybrid;
mapView.showsUserLocation = YES;
// ...
[mapView.userLocation addObserver:self forKeyPath:@"location" options:0 context:NULL];
[super viewDidLoad];
}
Мой dealloc:
- (void)dealloc {
[groupId release];
[[NSNotificationCenter defaultCenter] removeObserver:self];
[super dealloc];
}
Кто-либо может сказать мне что случилось здесь? Я нажимаю кнопку "Назад" в NavBar, и затем я вхожу в dealloc метод, и затем это переключается назад на более высокий ViewController и бросает эту ошибку.
Большое спасибо заранее и С наилучшими пожеланиями.
Вы устанавливаете и удалив наблюдателя на разных объектах. Вы добавляете контроллер представления в качестве наблюдателя USERLOCTION в образце первого кода, затем попытка удалить его из центра уведомлений по умолчанию во втором. Чтобы правильно удалить наблюдатель от userLocation, измените свой метод -dealloc к следующему:
- (void)dealloc {
[groupId release];
[mapView.userLocation removeObserver:self forKeyPath:@"location"];
[super dealloc];
}