Освобождение, пока наблюдатели значения ключа все еще зарегистрированы (обратный геокодер)

Когда мой обзор исчезает, я получаю следующее сообщение:

An instance 0x1c11e0 of class MKAnnotationView was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info:

( Контекст: 0x0, Свойство: 0x1e98d0> )

Код, который определяет и запускает обратное геокодирование:

geo=[[MKReverseGeocoder alloc] initWithCoordinate:droppedAt];
        geo.delegate=self;
        [geo start];

Я попытался установить для geo.delegate значение nil прямо перед тем, как закрыть представление. Это было бы слишком просто. Я также пробовал:

for (id <MKAnnotation> annotation in mvMap.annotations) {
    [[mvMap viewForAnnotation:annotation] removeObserver:self forKeyPath:@"selected"];
}

Что вызывает ошибку, которая гласит:

* Завершение работы приложения из-за неперехваченного исключения «NSRangeException», причина: «Невозможно удалить наблюдателя для ключевого пути,« выбранного »из, потому что это не зарегистрирован в качестве наблюдателя.

Я считаю, что код аннотации таков:

-(MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation {
    MKAnnotationView *aView;

    aView=(MKAnnotationView *) [mapView dequeueReusableAnnotationViewWithIdentifier:annotation.title];
    if (aView==nil) 
        aView=[[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:annotation.title] autorelease];
    else
        aView.annotation=annotation;
    [aView setImage:[UIImage imageNamed:selIcon]];
    aView.canShowCallout=TRUE;
    aView.draggable=YES;
    return aView;
}

Я как бы нажимаю кнопки и переключаю переключатели здесь во время вращения. Есть идеи, что я могу здесь сделать?

17
задан mlewis54 21 February 2011 в 23:09
поделиться