chamando setCoordinate no MKPlacemark aplicativo com falha 'não reconhecido seletor'
-
10-12-2019 - |
Pergunta
Eu tenho um MKMapView, eu estou adicionando um único MKPlacemark para representar a localização de um edifício, o usuário tem apenas selecionado.O usuário só pode selecionar um edifício em um momento, e eu simplesmente deseja mover o marcador para o novo edifício, ao selecionar um novo edifício.No primeiro edifício, que seleccionam, ele funciona bem e coloca um pino no mapa.Quando eu tento chamar setCoordinate
sobre o marcador para atualizar a posição do marcador ao selecionar um novo edifício, embora, eu recebo -[MKPlacemark setCoordinate:]: unrecognized selector sent to instance
Em MyViewController.h eu tenho:
@property (nonatomic, strong)MKPlacemark *selectedBuildingPlacemark;
Em 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];
}
Eu pensei MKPlacemark conformado MKAnnotation e, portanto, deve implementar setCoordinate
.Alguém pode me mostrar o erro dos meus caminhos?
Solução
A documentação de MKAnnotation
diz:
Anotações que suporta arrastar deve implementar este método para atualizar a posição da anotação.
Portanto, o método setCoordinate:
é opcional e só é implementada por classes que oferecem suporte a arrastar.A documentação de MKPlacemark
não faz referência a esse método, por isso não é implementado.
Portanto, você deve criar uma nova instância a cada vez que você selecionar um novo edifício.
Outras dicas
Se você não precisa especificamente para usar um MKPlacemark
(não parece, porque você está passando nulo para o addressDictionary), você pode usar o MKPointAnnotation
em vez de classe.
MKPointAnnotation
implementa MKAnnotation
mas acrescenta um setCoordinate
o método.