llamar a setCoordinate en MKPlacemark bloquea la aplicación con un 'selector no reconocido'
-
10-12-2019 - |
Pregunta
Tengo un MKMapView al que estoy agregando un único MKPlacemark para representar la ubicación de un edificio que el usuario acaba de seleccionar.El usuario solo puede seleccionar un edificio a la vez y simplemente quiero mover la marca de posición al nuevo edificio cuando seleccione un edificio nuevo.En el primer edificio que seleccionan, funciona bien y coloca un marcador en el mapa.Cuando intento llamar setCoordinate
Sin embargo, en la marca de posición para actualizar la posición del marcador cuando seleccionan un nuevo edificio, aparece -[MKPlacemark setCoordinate:]: unrecognized selector sent to instance
En MyViewController.h tengo:
@property (nonatomic, strong)MKPlacemark *selectedBuildingPlacemark;
En MyViewController.m
@synthesize selectedBuildingPlacemark;
...
if (self.selectedBuildingPlacemark == nil) {
self.selectedBuildingPlacemark = [[MKPlacemark alloc] initWithCoordinate:myCoord addressDictionary:nil];
[mapView addAnnotation:self.selectedBuildingPlacemark];
}
else {
[self.selectedBuildingPlacemark setCoordinate:myCoord];
}
Pensé que MKPlacemark se ajustaba a MKAnnotation y, por lo tanto, debería implementar setCoordinate
.¿Alguien puede mostrarme el error de mis caminos?
Solución
la documentacion de MKAnnotation
dice:
Las anotaciones que admiten el arrastre deben implementar este método para actualizar la posición de la anotación.
Entonces el método setCoordinate:
es opcional y solo lo implementan clases que admiten el arrastre.la documentacion de MKPlacemark
no hace referencia a ese método, por lo que no está implementado.
Por lo tanto, debes crear una nueva instancia cada vez que selecciones un nuevo edificio.
Otros consejos
Si no necesita específicamente utilizar un MKPlacemark
(no lo parece porque estás pasando nil para el diccionario de direcciones), puedes usar el MKPointAnnotation
clase en su lugar.
MKPointAnnotation
implementos MKAnnotation
pero agrega un setCoordinate
método.