Domanda

Ho fatto una classe MKAnnotation personalizzato, MapLocation. Sto avendo difficoltà a nessuna impostazione o di ottenere le proprietà, se non in questo metodo per creare un MKAnnotationView. Ho bisogno di fare qui, in quanto si suppone per cercare un tipo di posizione dall'indice della annotazione e selezionare uno di una famiglia di immagini di annotazione personalizzate per l'annotationView.

Dopo numerosi tentativi di creazione di getter e setter personalizzati in MapLocation.h e .m, ho bollito giù a dove non riesco nemmeno a copiare il (obbligatorio) getter, titolo, rinominarlo in title2, e cercare di ottenere il suo valore di ritorno. Questo è il mio codice:

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

}

sulla linea 4, il titolo viene restituito correttamente, ma invito il 5 ° di linea per il metodo copiato restituisce il messaggio di errore nel tema.

ho guardato nella documentazione XCode, ma io sono probabilmente solo non ottenere come dichiarare in modo questo metodo lo vede. Strano che vede il titolo getter, ma non la copia title2.

È stato utile?

Soluzione

Provare a cambiare la linea da notazione del punto a questo:

NSString *str2=[annotation title2];

e l'errore dovrebbe andare via.

Quello che sta succedendo è che il compilatore è stato detto che l'annotazione è un MKAnnotation. Il fatto che si sa che cosa gli altri metodi è ottenuto è irrelevent; il compilatore non è psichica - tutto ciò che sa è che l'annotazione segue il protocollo MKAnnotation, niente di più. La ragione per cui si vede il titolo getter è Allucinante il titolo è definito in MKAnnotation.

È anche possibile risolvere questo problema utilizzando un cast:

MapLocation *mapLocation = (MapLocation *)annotation;

Ora, si può dire

NSString *str2=mapLocation.title2;

perché hai detto al compilatore che mapLocation è un obejct MapLocation.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top