2011-11-20 2 views
12

У меня есть MKMapView и я добавляю аннотаций, как это:MKAnnotation не показывая выноски на MKMapView

for (NSDictionary *tmp in response) 
{ 
    NSDictionary *places = [tmp objectForKey:@"place"]; 
    NSDictionary *location = [places objectForKey:@"location"]; 
    NSLog(@"long: %@ Lat:%@",[location objectForKey:@"longitude"], [location objectForKey:@"latitude"]); 

    float longitude = [[location objectForKey:@"longitude"] floatValue]; 
    float latitude = [[location objectForKey:@"latitude"] floatValue]; 


    CLLocationCoordinate2D locationco = {latitude,longitude}; 
    NSString *titleString = [tmp objectForKey:@"name"]; 

    Place *pin = [[Place alloc] init]; 
    pin.coordinate = locationco; 
    pin.title = titleString; 
    pin.subtitle = @"A Location"; 

    //NSArray *annots = [[NSArray alloc] initWithObjects:pin, nil]; 
    //[map addAnnotations:annots]; 
    [map addAnnotation:pin]; 
    [[map viewForAnnotation:pin] setCanShowCallout:YES]; 
} 

MKAnnotation «s показать на карте штрафа, и я могу выбрать их, однако нет появляется вызывной пузырь. Я знаю, что они выбраны правильно сформировать этот

-(void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view 
{ 
    [view setCanShowCallout:YES]; 
    NSLog(@"Title:%@",[view.annotation description]); 
} 

Но это просто выводит из

Title:(null) 

Я использую ARC, и у меня есть свойства, установленные в моем месте объекта как такового :

@property (nonatomic) CLLocationCoordinate2D coordinate; 
@property (nonatomic,readwrite, copy) NSString *title; 
@property (nonatomic,readwrite, copy) NSString *subtitle; 

Что я делаю неправильно/отсутствует? Спасибо.

+0

Перед строкой 'addAnnotation' вы можете NSLog' pin.title' и посмотреть, что он показывает? Кроме того, в объекте Place вы переопределили метод 'description', и если да, то какой код там? – Anna

+0

'NSLog (@"% @ ", pin.title);' Просто возвращает '(null)'. Однако я не понимаю, почему. –

ответ

40

Выноска не отображается, потому что title является nil.

Нет необходимости в реализации viewForAnnotation, чтобы отображать выноски, поскольку в представлении отображения по умолчанию отображаются выноски. (Тем не менее, если вы сделать реализовать его, вы должны установить canShowCallout в этом методе делегата и не там, где вы делаете это прямо сейчас.)

Даже если вы установите canShowCallout в YES, выноска еще не будет отображаться, если title - nil или пустой.

Зарегистрировать словарь tmp. Либо ключ name пуст, либо его не существует.

+0

Большое вам спасибо. Такая глупая ошибка. –

+0

@Anna: нет свойства tiltile для MKPinAnnotationView. как я могу сделать то же самое. –

+0

Это была проблема для меня. – instanceof

9

Вам необходимо реализовать метод MKMapViewDelegate mapView:viewForAnnotation:, который создает представление и возвращает его. В этом методе вызовите [view setCanShowCallout:YES]; на вид, который вы планируете вернуть для аннотации.

Поскольку mapView:didSelectAnnotationView: вызывается ПОСЛЕ того, как выбран штифт, он не будет влиять на включение/выключение выноски.

+0

Спасибо, мне не хватало этого кода. К сожалению, у меня все еще проблема. Похоже, что 'pin.title' не устанавливается должным образом, как если бы я пытался распечатать его сразу после его установки, это просто prings' (null) ' –

+0

Извините, полностью не замечайте этого, вы должны принять другой ответ, поскольку он абсолютно правильно. :) –

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