iPhone - Экземпляр класса … освобождается, в то время как наблюдение значения ключа все еще регистрируется в нем

У меня есть 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 и бросает эту ошибку.

Большое спасибо заранее и С наилучшими пожеланиями.

7
задан Tim 11 January 2010 в 17:13
поделиться

1 ответ

Вы устанавливаете и удалив наблюдателя на разных объектах. Вы добавляете контроллер представления в качестве наблюдателя USERLOCTION в образце первого кода, затем попытка удалить его из центра уведомлений по умолчанию во втором. Чтобы правильно удалить наблюдатель от userLocation, измените свой метод -dealloc к следующему:

- (void)dealloc {
    [groupId release];
    [mapView.userLocation removeObserver:self forKeyPath:@"location"];
    [super dealloc];
}
12
ответ дан 6 December 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: