Custom anotace, ‚Přístup k neznámé metody getter‘

hlasů
0

Udělal jsem si vlastní třídu MKAnnotation, MapLocation. Mám žádný problém nastavování nebo získávání vlastnosti, s výjimkou tímto způsobem se vytvořila MKAnnotationView. Musím to udělat tady, protože by to mělo vypadat vytvoření typ umístění z indexu anotaci a vyberte jednu z rodiny zakázku anotace obrázků pro annotationView.

Po mnoha pokusech o vytvoření vlastní metody pro čtení a zápis do MapLocation.h a .m, vařené jsem ho na místo, kde jsem si ani kopírovat (povinné) getter, název, přejmenovat Title2, a pokusit se získat svou návratovou hodnotu , To je můj kód:

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

}

4. řádku název je vrácena správně, ale 5. řádek výzva k kopírovaného způsobem získá chybovou zprávu v tématu.

Jsem se podívat do Xcode docs, ale já jsem asi jen nedostávají jak prohlásit to tak je tato metoda ho vidí. Zvláštní, že to vidí titulní kariérista, ale ne TITLE2 kopírování.

Položena 18/05/2010 v 15:42
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

Zkuste změnit řádek z bodového zápisu na toto:

NSString *str2=[annotation title2];

a chyba by měl odejít.

To, co se děje, je, že kompilátor bylo řečeno, že anotace je MKAnnotation. Skutečnost, že víte, co ostatní metody je to tu je irrelevent; kompilátor není psychický - vše, co ví, je, že anotace následuje protokol MKAnnotation, nic víc. Důvod, že to vidí titulní kariérista je beacuse název je definován v MKAnnotation.

Můžete také opravit pomocí obsazení:

MapLocation *mapLocation = (MapLocation *)annotation;

Nyní můžete říct,

NSString *str2=mapLocation.title2;

protože jste řekl, že kompilátor mapLocation je MapLocation obejct.

Odpovězeno 18/05/2010 v 15:48
zdroj uživatelem

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