annotation personnalisée, « Accès getter inconnu »

voix
0

Je l'ai fait une classe MKAnnotation personnalisée, MapLocation. Je ne pas avoir des difficultés pour établir ou d'obtenir des propriétés, sauf dans cette méthode pour créer un MKAnnotationView. Je dois le faire ici, car il est censé rechercher un type d'emplacement de l'index de l'annotation et sélectionnez l'une d'une famille d'images d'annotation personnalisée pour l'annotationView.

Après de nombreuses tentatives de mise en place getters personnalisés et setters dans MapLocation.h et .m, je fait bouillir à l'endroit où je ne peux pas copier le même (obligatoire) getter, titre, renommez-Title2, et essayer d'obtenir sa valeur de retour . Ceci est mon code:

-(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;

}

Sur la 4e ligne, le titre est retourné correctement, mais l'appel de la 5ème ligne à la méthode copiée donne le message d'erreur dans le sujet.

Je ne regarde dans les documents XCode, mais je ne suis probablement pas obtenir comment déclarer si cette méthode qu'il voit. Étrange qu'il voit le getter titre, mais pas la copie Title2.

Créé 18/05/2010 à 15:42
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
3

Essayez de changer la ligne de la notation par points à ceci:

NSString *str2=[annotation title2];

et l'erreur devrait disparaître.

Ce qui se passe est que le compilateur a été dit que l' annotation est un MKAnnotation. Le fait que vous savez ce que d' autres méthodes , il est obtenu est irrelevent; le compilateur n'est pas psychique - tout ce qu'il sait est que l' annotation suit le protocole MKAnnotation, rien de plus. La raison pour laquelle il voit le getter titre est beacuse le titre est défini dans MKAnnotation.

Vous pouvez également résoudre ce problème en utilisant un casting:

MapLocation *mapLocation = (MapLocation *)annotation;

Maintenant, vous pouvez dire

NSString *str2=mapLocation.title2;

parce que vous avez dit au compilateur que mapLocation est un obejct de MapLocation.

Créé 18/05/2010 à 15:48
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more