Проблема с выбранными аннотациями
:) У меня действительно странная проблема при попытке получить свойства выбранной аннотации. Вот краткое описание моей проблемы:
Я передаю первый объект из выбранного массива аннотаций в новый массив, так как он мне нужен только один (в соответствии с Apple doc, передача массива selectedAnnotations в новый массив выбирает только первый объект. Но я пытался вытянуть объект непосредственно из массива selectedAnnotations с индексным путем 0, и это та же проблема).
Затем я преобразую объект в объект пользовательской аннотации (поскольку это должен быть объект).
После этого я пытаюсь получить доступ к свойствам моего временного объекта аннотации. Вот когда все вырвалось на свободу. NSLog объекта показывает только адрес памяти. Свойство Text имеет значение null. Поэтому я не могу получить к нему доступ.
Я был бы признателен за любую помощь в том, что я делаю неправильно или какой подход я должен использовать. Спасибо, любезно!
Вот код:
-(void) mapView:(MKMapView *)aMapView didSelectAnnotationView:(MKAnnotationView *)view
{
if ([view isUserInteractionEnabled])
// NSLog(@"Tapped!!!");
{
NSArray* selectedAnnotation=mapView.selectedAnnotations;
CustomAnnotations *selectedAnn=[selectedAnnotation objectAtIndex:0];
NSLog(@"selected annotation text is %@", selectedAnn.text);
Мой пользовательский класс аннотаций имеет координату и текстовое свойство, и он размещается на карте с помощью этого кода:
CustomAnnotations* commentAnnotation = [[[CustomAnnotations alloc] initWithLocation:mapView.userLocation.location.coordinate andTitle:@"comment" andText:text]autorelease];
[mapView addAnnotation:commentAnnotation];
Кроме того, представление для аннотации имеет следующую кодировку:
-(MKAnnotationView *) mapView:(MKMapView *) aMapView viewForAnnotation:(id<MKAnnotation>)annotation
{
if ([annotation isKindOfClass:[MKUserLocation class]])
return nil;
MKAnnotationView *customAnnotation = (MKAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:@"pin"];
if(!customAnnotation)
{
customAnnotation = [[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"pin"]autorelease];
}
customAnnotation.centerOffset=CGPointMake(10, -30);
if ([annotation title]==@"comment")
{
customAnnotation.userInteractionEnabled=YES;
customAnnotation.image=[UIImage imageNamed:@"NewCommentsPin.png"];
}
return customAnnotation;
}
Любая помощь приветствуется!
Я выяснил проблему: мой пользовательский класс аннотаций выпускал текст в dealloc. Мне еще предстоит пройти долгий путь, пока я не пойму, когда выпускать, а когда нет, но только по одному шагу за раз!:)
1 ответ
Вот твой release
шпаргалка.
Когда вы создаете объект, и у него есть любое из слов
new
,alloc
,copy
или жеretain
в конструкторе он принадлежит вам, и вы должны освободить его, если вам больше не нужна ссылка.