Проблема с выбранными аннотациями - PullRequest
1 голос
/ 01 сентября 2011

:) У меня действительно странная проблема при попытке получить свойства выбранной аннотации.Вот краткое описание моей проблемы:

Я передаю первый объект из выбранного массива аннотаций в новый массив, так как он мне нужен только (в соответствии с 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 Ответ

0 голосов
/ 01 сентября 2011

Вот ваш release шпаргалка.

Когда вы создаете объект, и у него есть любое из слов new, alloc, copy или retain в конструкторе, затем у вас есть и у вас есть отпустить его, если вам больше не нужна ссылка.

...