Свойства пользовательской аннотации не видны в методах делегатов
У меня есть много пользовательских аннотаций, которым я дал свойство (NameTable и ID). Я устанавливаю это свойство перед AddAnnotation в момент создания, но эти свойства в методах делегата больше не видны. У меня есть несколько аннотаций, связанных с элементами таблиц, взятых из базы данных. Как я могу сделать их видимыми в методах делегата?
- (void)viewDidLoad
{
//......
for(int i=0; i<6; i++){ //loop for create multiple annotations
AnnotationCustom *annotationIcone =[[AnnotationCustom alloc]initWithCoordinates:coord
title:self.myTable.title subTitle:self.myTable.address];
annotationIcone.nameTable = [NSString stringWithFormat:@"%@", self.myTableName];
annotationIcone.ID = i+1;
[self.mapView addAnnotation: annotationIcone;
//.....
}
Но в делегате методы:
(MKAnnotationView *)mapView:(MKMapView *)mapview viewForAnnotation:(id
<MKAnnotation>)annotation
{
NSLog(@"The name of table is:@"%@", annotation.nameTable);
//property 'nameTable' not found on object of type '_strong id <MKAnnotation>
NSLog (@The name of table is:@%@", annotation.ID);
//property 'ID' not found on object of type '_strong id <MKAnnotation>
//......
}
По другому методу:
- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view{
NSLog(@"The name of table is %@", self.myTableName);
// here I get the name of last table open and not the name of table selected
}
1 ответ
Решение
В viewForAnnotation вам нужно сообщить компилятору, что аннотация на самом деле является объектом AnnotationCustom.
Итак, сначала вам нужно сделать это:
AnnotationCustom *annotationCustom = (AnnotationCustom *)annotation;
а затем попробуйте получить доступ к свойству nameTable..
В методе didSelectAnnotationView, если вы хотите получить значение nameTable выбранной аннотации, вам нужно сделать следующее:
AnnotationCustom *annotationCustomSelected = (AnnotationCustom *)view.annotation;
NSLog(@"table name of annotation selected: %@", annotationCustomSelected.nameTable);