Custom merknader, 'Tilgang ukjent getter metoden'

stemmer
0

Jeg har laget et tilpasset MKAnnotation klasse, MapLocation. Jeg har ingen problemer med å sette eller få egenskaper, bortsett fra i denne metoden for å skape en MKAnnotationView. Jeg trenger å gjøre det her, siden det er ment å slå opp et sted type fra merknaden indeks og velg en av en familie av tilpassede merknads bilder for annotationView.

Etter utallige forsøk på å sette opp egendefinerte kundeskaffere og settere i MapLocation.h og BFD, jeg kokt det ned til hvor jeg kan ikke engang kopiere (obligatorisk) getter, tittel, endre navnet til TITLE2, og prøve å få returverdien . Dette er min kode:

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

}

På den fjerde linje, er tittelen tilbake på riktig måte, men den femte linjen oppfordring til den kopierte metode gir feilmeldingen i emnet.

Jeg fikk se i Xcode docs, men jeg er nok bare ikke får hvordan å erklære det så denne metoden ser det. Merkelig at det ser tittelen getter, men ikke TITLE2 kopi.

Publisert på 18/05/2010 klokken 14:42
kilden bruker
På andre språk...                            


1 svar

stemmer
3

Prøv å endre linje fra dot notasjon til dette:

NSString *str2=[annotation title2];

og feilen skulle gå bort.

Hva skjer er at kompilatoren har blitt fortalt at merknaden er en MKAnnotation. Det faktum at du vet hva andre metoder det har er irrelevant; kompilatoren er ikke synsk - alt det vet er at merknaden følger MKAnnotation protokollen, ikke noe mer. Grunnen til at det ser tittelen getter er fordi tittelen er definert i MKAnnotation.

Du kan også fikse dette ved hjelp av en cast:

MapLocation *mapLocation = (MapLocation *)annotation;

Nå kan du si

NSString *str2=mapLocation.title2;

fordi du har fortalt kompilatoren at mapLocation er en MapLocation stilte blåse.

Svarte 18/05/2010 kl. 14:48
kilden bruker

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