Niestandardowe adnotacja „Uzyskiwanie dostępu nieznaną metodę getter”

głosy
0

Zrobiłem niestandardowej klasy MKAnnotation, MapLocation. Mam żadnych problemów z dostaniem ustawień lub właściwości, z wyjątkiem tej metody do stworzenia MKAnnotationView. Muszę zrobić to tutaj, ponieważ to ma wyglądać w górę typ lokalizacji z indeksu adnotacji i wybierz jedną z rodziny niestandardowych obrazów adnotacji na annotationView.

Po licznych próbach utworzenia niestandardowych pobierające i ustawiające w MapLocation.h i .m, ja gotuje je w dół do miejsca, gdzie nawet nie mogę skopiować (obowiązkowo) getter, tytuł, zmienić jego nazwę na Title2, i postarać się o jego wartości zwracanej , To jest mój kodu:

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

}

Na 4 linii, tytuł jest zwracany poprawnie, ale wywołanie 5 linii do skopiowanego metoda daje komunikat o błędzie w temacie.

I wyglądał w docs Xcode, ale ja chyba po prostu nie dostaję, jak deklarują, że tak ta metoda widzi. Dziwne, że widzi się tytułowy getter, ale nie kopia TITLE2.

Utwórz 18/05/2010 o 15:42
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
3

Spróbuj zmienić linię z notacji kropki do tego:

NSString *str2=[annotation title2];

a błąd powinien odejść.

Co się dzieje jest to, że kompilator został poinformowany, że adnotacja jest MKAnnotation. Fakt, że wiesz, co inne metody nie ma to jest irrelevent; kompilator nie jest psychiczny - wszystko to wie, że adnotacja następujący protokół MKAnnotation, nic więcej. Powodem, że widzi się tytułowy getter jest beacuse tytuł jest definiowany w MKAnnotation.

Można również naprawić za pomocą obsady:

MapLocation *mapLocation = (MapLocation *)annotation;

Teraz można powiedzieć,

NSString *str2=mapLocation.title2;

dlatego, że powiedział, że kompilator mapLocation jest obejct MapLocation.

Odpowiedział 18/05/2010 o 15:48
źródło użytkownik

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