Question

Je l'ai fait une classe MKAnnotation personnalisée, MapLocation. Je vais avoir aucun réglage de la difficulté à obtenir ou 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 le annotationView.

Après de nombreuses tentatives de mise en place des accesseurs personnalisés 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.

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

Était-ce utile?

La solution

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

NSString *str2=[annotation title2];

et l'erreur devrait disparaître.

Qu'est-ce qui se passe est que le compilateur a été dit que l'annotation est un MKAnnotation. Le fait que vous savez ce que les autres méthodes, il est GOT 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top