2011-05-03 13 views
7

Estoy utilizando una clase de anotación de mapa personalizada para ver el mapa en iPhone. Cada vez que saco mi vista del mapa de la pila de la barra de navegación, generalmente veo algunas advertencias en la consola.Advertencia en el mapa personalizado Anotaciones iPhone

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

No estoy usando MVA en mi código, por tanto, no es capaz de entender por qué estoy recibiendo estas advertencias

Respuesta

30

Latitud y longitud tienen diferentes límites:

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

Pasando un valor fuera de esos límites se causa que la clase personalizada sea desasignada y, por lo tanto, le proporcione el error que está recibiendo. Asegúrese de estar pasando los valores correctos para Latitud y Longitud.

Sería muy bueno si Apple pasó un error de límite para esto en lugar de un error de lanzamiento anticipado. Eso me habría ahorrado unos 5 horas de valor de tiempo

+0

El problema sigue ahí en iOS7. Estaba un poco indefenso ya que estoy usando ARC y no pude imaginar por qué la anotación de mi mapa se publicó demasiado pronto. ¡Estoy feliz de haber encontrado tu respuesta! +1 –

0

¿Está autoreleasing su anotación antes de añadir a la MapView?

Si es así, intente solo asignarlo, agréguelo a MapView y suéltelo.

1

Se ha solucionado. Estaba usando un par incorrecto de latitud y longitud en anotaciones, he cambiado el mismo y ahora todo parece perfecto y la advertencia también ha desaparecido.

+0

¿Puede proporcionar un poco más de detalle de lo que hizo para solucionarlo? – KronoS

+0

@KronoS He usado un par incorrecto de latitud y longitud que no eran realistas, he utilizado valores correctos y nunca volví a ver esa advertencia. – sandy

7

que estaba recibiendo el mismo error que tú:

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> 

Como se señaló aquí que fue causado porque yo estaba añadiendo una MKAnnotation con un inválido a coordinar un MKMapView.

Mi solución fue crear una función para verificar la coordenada válida.

Place + MKAnnotation.m

he creado una categoría de mi clase Lugar y

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

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

Place + MKAnnotation.m

@implementation Place (MKAnnotation) 

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

} 
... 
@end 

sólo añadir la anotación en mi ViewController si la coordenada es válida

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