Предупреждение в пользовательских аннотациях карты iPhone - PullRequest
7 голосов
/ 03 мая 2011

Я использую пользовательский класс аннотации карты для просмотра карты в iPhone. Всякий раз, когда я выскакиваю свой вид карты из стека навигационной панели, я обычно вижу некоторые предупреждения в консоли.

MapAnnotation был освобожден, в то время как наблюдатели значения ключа все еще были зарегистрированы в нем. Информация наблюдений была утечка, и даже может быть ошибочно привязана к какому-либо другому объекту. Установите точку останова на NSKVODeallocateBreak, чтобы остановиться здесь в отладчике. Вот текущая информация наблюдения:

Я не использую KVO в своем коде, поэтому не могу понять, почему я получаю эти предупреждения

Ответы [ 4 ]

30 голосов
/ 21 апреля 2012

Широта и Долгота имеют разные границы:

  • (- 90, 90) для лата
  • (- 180, 180) для Long

Передача значения за пределы этих границ приведет к освобождению пользовательского класса и, следовательно, к полученной вами ошибке. Убедитесь, что вы передаете правильные значения для широты и долготы.

Было бы неплохо, если бы Apple допустила для этого ограничивающую ошибку вместо ошибки раннего выпуска. Это сэкономило бы мне примерно 5 часов времени

7 голосов
/ 29 сентября 2012

Я получаю ту же ошибку, что и вы:

An instance 0xa975400 of class xxxxxx 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:
<NSKeyValueObservationInfo 0xa980eb0> (
<NSKeyValueObservance 0xa980e70: Observer: 0xa94f8a0, Key path: coordinate, Options: <New: NO, Old: NO, Prior: YES> Context: 0x0, Property: 0xa980ef0>

Как указано здесь, это было вызвано тем, что я добавлял MKAnnotation с неверной координатой в MKMapView.

Мое решение состояло в том, чтобы создать функцию для проверки действительной координаты.

Место + MKAnnotation.m

Я создал категорию своего класса Place и

#import "Place.h"
#import <MapKit/MapKit.h>

@interface Place (MKAnnotation) <MKAnnotation>
- (BOOL)coordinateIsValid;
...
@end

Место + MKAnnotation.m

@implementation Place (MKAnnotation)

- (BOOL)coordinateIsValid
{
    return CLLocationCoordinate2DIsValid(CLLocationCoordinate2DMake([self.latitude doubleValue],[self.longitude doubleValue]));

}
...
@end

Я добавляю аннотацию в свой ViewController только в том случае, если координата действительна.

if([p coordinateIsValid]) {
    [self.mapView addAnnotation:p];
} 
1 голос
/ 04 мая 2011

Исправлено. Я использовал неправильную пару широты и долготы в аннотациях, я изменил то же самое, и теперь все кажется идеальным, и предупреждение также исчезло.

0 голосов
/ 03 мая 2011

Вы автоматически выпускаете свою аннотацию перед ее добавлением в MapView?

Если это так, попробуйте просто выделить его, добавить в MapView, а затем отпустить.

...