adnotare personalizată, „Accesarea metoda getter necunoscut“

voturi
0

Am făcut o clasă personalizat MKAnnotation, MapLocation. Am nici o problema setarea sau pentru a obține proprietăți, cu excepția cazului în această metodă pentru a crea un MKAnnotationView. Trebuie să o fac aici, din moment ce ar trebui să caute un tip de locație din indexul adnotarea și selectați unul dintr-o familie de imagini personalizate de adnotare pentru annotationView.

După numeroase încercări de configurarea getteri personalizate și setteri în MapLocation.h și .m, l-am fiert în jos pentru cazul în care nici măcar nu pot copia (obligatoriu) getter, titlul, redenumiți-l la TITLE2, și să încercați să obțineți valoarea returnata . Acesta este codul meu:

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

}

Pe linia 4, din titlu este returnat corect, dar apelul a 5-a liniei la metoda copiat produce mesajul de eroare în subiect.

M-am uita în docs Xcode, dar eu sunt, probabil, doar nu obtinerea cum să o declare astfel încât această metodă vede. Ciudat că vede getter din titlu, dar nu copia TITLE2.

Întrebat 18/05/2010 la 15:42
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
3

Încercați să schimbați linia de la notația punct la acest lucru:

NSString *str2=[annotation title2];

iar eroarea ar trebui să dispară.

Ce se întâmplă este că compilator a fost spus că adnotare este MKAnnotation. Faptul că știi ce alte metode este luat este irrelevent; compilatorul nu este medium - tot ce știe este că adnotare urmează protocolul MKAnnotation, nimic mai mult. Motivul pentru care o vede getter din titlu este beacuse titlul este definit în MKAnnotation.

Puteți rezolva, de asemenea, acest lucru utilizând o distributie:

MapLocation *mapLocation = (MapLocation *)annotation;

Acum, poți spune

NSString *str2=mapLocation.title2;

pentru că v-am spus compilator că mapLocation este un obejct MapLocation.

Publicat 18/05/2010 la 15:48
sursa de către utilizator

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