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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top