Pergunta

Fiz uma classe de mkannotação personalizada, MapLocation. Não estou tendo problemas para definir ou obter propriedades, exceto neste método para criar um MkannoTationView. Preciso fazer isso aqui, pois deve procurar um tipo de localização no índice da anotação e selecionar uma de uma família de imagens de anotação personalizada para o AnoTationView.

Após inúmeras tentativas de configurar getters e setters personalizados em mapLocation.h e .m, eu o resumi para onde não consigo nem copiar o getter (obrigatório), o título, renomeá -lo para o título2 e tentar obter seu valor de retorno . Este é o meu código:

-(MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation {
static NSString *placemarkIdentifier=@"Map Location Identifier";
NSString *str1=annotation.title;
NSString *str2=annotation.title2;
if([annotation isKindOfClass:[MapLocation class]]) {
    MKAnnotationView *annotationView=(MKAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:placemarkIdentifier];
    if (annotationView==nil) {
        annotationView=[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placemarkIdentifier];
    }
    else
        annotationView.annotation=annotation;


    return annotationView;
}
return nil;

}

Na quarta linha, o título é devolvido corretamente, mas a chamada da 5ª linha para o método copiado produz a mensagem de erro no tópico.

Eu olhei nos documentos do Xcode, mas provavelmente não estou entendendo como declará -lo, para que esse método o veja. Estranho que ele veja o título Getter, mas não a cópia do Title2.

Foi útil?

Solução

Tente alterar a linha da notação de ponto para isso:

NSString *str2=[annotation title2];

e o erro deve desaparecer.

O que está acontecendo é que o compilador foi informado de que a anotação é um MKAnnotation. O fato de você saber quais outros métodos tem é irrelevante; O compilador não é psíquico - tudo o que sabe é que a anotação segue o protocolo de Mkannotation, nada mais. A razão pela qual ele vê o título Getter é Beacse, o título é definido na Mkannotation.

Você também pode consertar isso usando um elenco:

MapLocation *mapLocation = (MapLocation *)annotation;

Agora você pode dizer

NSString *str2=mapLocation.title2;

Porque você disse ao compilador que o MapLocation é um MapLocation obejct.

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