Пользовательские аннотации, «Доступ к неизвестному геттеру»

голоса
0

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

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

-(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-е строки, название возвращается правильно, но вызов 5-й линии к скопированной методе дает сообщение об ошибке в этой теме.

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

Задан 18/05/2010 в 15:42
источник пользователем
На других языках...                            


1 ответов

голоса
3

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

NSString *str2=[annotation title2];

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

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

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

MapLocation *mapLocation = (MapLocation *)annotation;

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

NSString *str2=mapLocation.title2;

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

Ответил 18/05/2010 в 15:48
источник пользователем

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