Advertencia en annotations de map personalizadas iPhone

Estoy usando una class de anotación de map personalizada para la vista de map en iPhone. Cada vez que presento mi vista de map desde la barra de navigation, suelo ver algunas advertencias en la console.

MapAnnotation fue desasignado mientras los observadores de valores key aún estaban registrados con él. La información de observación se filtró, e incluso puede conectarse erróneamente a algún otro object. Establezca un punto de interrupción en NSKVODeallocateBreak para detenerse aquí en el depurador. Aquí está la información de observación actual:

No uso KVO en mi código, por lo tanto, no puedo entender por qué estoy recibiendo estas advertencias.

La latitud y la longitud tienen diferentes límites:

  • (-90, 90) para Lat
  • (-180, 180) para largo

Pasar un valor fuera de esos límites hará que la class personalizada se desasigne y, por lo tanto, le proporcione el error que está recibiendo. Asegúrese de pasar los valores correctos para Latitude y Longitude.

Sería muy bueno si Apple pasara un error delimitador para esto en lugar de un error de lanzamiento anticipado. Eso me hubiera ahorrado aproximadamente 5 horas de time

Estaba recibiendo el mismo error que tú:

An instance 0xa975400 of class xxxxxx was deallocated while key value observers were still registenetworking 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> 

Como se señaló aquí, fue causado porque estaba agregando una MKAnnotation con una coorderada inválida a un MKMapView.

Mi solución fue crear una function para verificar la coorderada válida.

Lugar + MKAnnotation.m

Creé una categoría de mi class Place y

 #import "Place.h" #import <MapKit/MapKit.h> @interface Place (MKAnnotation) <MKAnnotation> - (BOOL)coordinateIsValid; ... @end 

Lugar + MKAnnotation.m

 @implementation Place (MKAnnotation) - (BOOL)coordinateIsValid { return CLLocationCoordinate2DIsValid(CLLocationCoordinate2DMake([self.latitude doubleValue],[self.longitude doubleValue])); } ... @end 

Solo agrego la anotación en mi ViewController si la coorderada es válida.

 if([p coordinateIsValid]) { [self.mapView addAnnotation:p]; } 

Arreglado. Estaba usando un par incorrecto de latitud y longitud en las annotations, he cambiado el mismo y ahora todo parece ser perfecto y la advertencia también ha desaparecido.

¿Autoriza su anotación antes de agregarla a MapView?

Si es así, intente simplemente asignarlo, agregarlo a MapView y luego liberarlo.