2010-05-18 3 views
0

Я создал собственный класс MKAnnotation, MapLocation. У меня нет проблем с настройкой или получением свойств, кроме этого метода для создания MKAnnotationView. Мне нужно сделать это здесь, так как он должен искать тип местоположения из индекса аннотации и выбирать одно из семейства пользовательских изображений аннотаций для аннотационного представления.Пользовательская аннотация, 'Доступ к неизвестному методу getter'

После многочисленных попыток создать пользовательские геттеры и сеттеры в MapLocation.h и .m, я откинул его туда, где я не могу даже скопировать (обязательный) геттер, заголовок, переименовать его в title2 и попытаться получить его возвращаемое значение. Это мой код:

-(MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation { 
static NSString *[email protected]"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-й строке, название возвращается правильно, но вызов 5-й линии к скопированной метода дает сообщение об ошибке в этой теме.

Я действительно смотрел в документах XCode, но я, вероятно, просто не понимаю, как объявить его, чтобы этот метод его видел. Странно, что он видит заголовок, но не копию title2.

ответ

3

Попробуйте изменить линию от точечной нотации к этому:

NSString *str2=[annotation title2]; 

и ошибка должна уйти.

Что происходит, так это то, что компилятору было сказано, что аннотация - это MKAnnotation. Тот факт, что вы знаете, какие другие методы он получил, не имеет значения; компилятор не психический - все, что он знает, это то, что аннотация следует протоколу MKAnnotation, не более того. Причина, по которой он видит заголовок заголовка, - это название, указанное в MKAnnotation.

Вы также можете исправить это с помощью бросание:

MapLocation *mapLocation = (MapLocation *)annotation; 

Теперь вы можете сказать

NSString *str2=mapLocation.title2; 

потому, что вы сказали, что компилятор mapLocation является MapLocation obejct.

+0

Я действительно смотрел, как объявить протокол MapLocation, когда увидел, что вы уже ответили. Итак, теперь у моих аннотаций есть индексы, которые связывают их с тем, что мне нужно, и отображаются правильные изображения для типа местоположения. Благодаря! Это не сработало (я уже пробовал это раньше): NSString * str2 = [annotation title2]; Он говорит, что -title2 неизвестен. Не помогает объявить его в интерфейсе. Немного странно для новичка, подобного мне, «поскольку компилятор не должен беспокоиться о сообщениях, это среда исполнения». Теперь я понимаю, что он будет жаловаться на дополнительные свойства без броска, спасибо! –

Смежные вопросы