Benutzerdefinierte Anmerkung, ‚Zugriff auf unbekannte Getter-Methode‘

stimmen
0

Ich habe eine benutzerdefinierte MKAnnotation Klasse, MapLocation gemacht. Ich habe keine Probleme, Einstellung oder Eigenschaften erhalten, außer daß in diesem Verfahren eine MKAnnotationView zu erstellen. Ich brauche es hier zu tun, da es angenommen hat, einen Standorttyp aus der Annotation-Index zu suchen und wählen Sie eine aus einer Familie von benutzerdefinierten Anmerkungs Bilder für die AnnotationView.

Nach zahlreichen Versuchen an kundenspezifische Getter und Setter in MapLocation.h Einrichtung und .m, gekocht ich es nach unten, wo ich die (obligatorische) Getter, Titel nicht einmal kopieren können, benennen Sie sie in title2, und versuchen, ihren Rückgabewert zu erhalten . Dies ist mein 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;

}

Auf der 4. Zeile ist, Titel korrekt zurückgegeben, aber die Forderung der fünften Zeile in der kopierte Methode erhält man die Fehlermeldung im Thema.

Ich sah in dem XCode docs, aber ich bin wahrscheinlich einfach nicht bekommen, wie zu erklären, es so dass diese Methode es sieht. Seltsam, dass sie sieht den Titel Getter, aber nicht die title2 Kopie.

Veröffentlicht am 18/05/2010 um 15:42
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
3

Versuchen Sie, die Linie von Punktnotation zu diesem Wechsel:

NSString *str2=[annotation title2];

und der Fehler sollte weggehen.

Was ist passiert , dass die Compiler gesagt wurde , dass Annotation eine ist MKAnnotation. Die Tatsache , dass Sie wissen , welche anderen Methoden es hat ist irrelevent; Der Compiler ist nicht psychisch - das alles weiß , ist , dass Annotation das MKAnnotation Protokoll, nichts mehr folgt. Der Grund , dass es den Titel Getter sieht , ist beacuse der Titel in MKAnnotation definiert ist.

Sie können auch dieses Problem beheben, indem eine Besetzung mit:

MapLocation *mapLocation = (MapLocation *)annotation;

Nun, man kann sagen,

NSString *str2=mapLocation.title2;

weil Sie den Compiler gesagt haben, dass MapLocation ein MapLocation obejct ist.

Beantwortet am 18/05/2010 um 15:48
quelle vom benutzer

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