Custom annotatie, 'Toegang tot onbekende getter methode'

stemmen
0

Ik heb een aangepaste MKAnnotation klasse gemaakt, omgevingMeer. Ik heb geen problemen met het instellen of het krijgen van onroerend goed, met uitzondering van deze methode om een ​​MKAnnotationView creëren. Ik moet het hier te doen, omdat het zou moeten opzoeken van een type locatie van de index van de annotatie en selecteer een van een familie van aangepaste annotatie beelden voor het annotationView.

Na talloze pogingen tot het instellen van aangepaste getters en setters in MapLocation.h en .m, ik kookte het naar beneden naar de plaats waar ik zelfs niet de (verplichte) getter, titel kan kopiëren, hernoem het naar title2, en proberen de return waarde te krijgen . Dit is mijn 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;

}

Op de 4e regel, wordt de titel juist teruggekeerd, maar de oproep van de 5e lijn om de gekopieerde methode krijgt de foutmelding in het onderwerp.

Ik zag er in de XCode docs, maar ik ben waarschijnlijk gewoon niet krijgen hoe te verklaren dus deze methode ziet. Vreemd dat hij ziet de titel getter, maar niet de title2 kopie.

De vraag is gesteld op 18/05/2010 om 15:42
bron van user
In andere talen...                            


1 antwoorden

stemmen
3

Probeer de lijn van puntnotatie om dit:

NSString *str2=[annotation title2];

en de fout moet verdwijnen.

Wat is er gebeurt is dat de compiler is verteld dat annotatie is MKAnnotation. Het feit dat je weet wat andere methoden die hij heeft is irrelevant; de compiler is niet psychisch - al weet is dat annotatie volgt de MKAnnotation protocol, niets meer. De reden dat hij ziet de titel getter is beacuse de titel is gedefinieerd in MKAnnotation.

U kunt dit ook op te lossen door het gebruik van een cast:

MapLocation *mapLocation = (MapLocation *)annotation;

Nu kun je zeggen

NSString *str2=mapLocation.title2;

want je kunt de compiler dat omgevingMeer is een omgevingMeer obejct hebt verteld.

antwoordde op 18/05/2010 om 15:48
bron van user

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