2011-11-20 12 views
12

Ho un MKMapView annotazioni e sto aggiungendo in questo modo:MKAnnotation non mostrare Richiamo 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]; 
} 

Il MKAnnotation 's presentarsi sulla mappa bene, e io li può scegliere, comunque non appare la bolla di callout. So che sono in corso di selezione adeguatamente formare questo

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

Ma che si limita a stampare fuori

Title:(null) 

sto usando ARC, e ho le proprietà impostate nel mio posto oggetto in quanto tale :

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

Cosa sto facendo di sbagliato/mancante? Grazie.

+0

Prima della riga 'addAnnotation', puoi NSLog' pin.title' e vedere cosa mostra? Inoltre, nell'oggetto Place hai sovrascritto il metodo 'description' per caso e in tal caso quale codice è presente? – Anna

+0

'NSLog (@"% @ ", pin.title);' Restituisce '(null)'. Non capisco perché però. –

risposta

40

Il callout non viene visualizzato perché title è nil.

Non è necessario implementare viewForAnnotation per visualizzare i callout poiché l'implementazione della visualizzazione mappa predefinita mostra i callout. (Tuttavia, se si fa sua attuazione, è necessario impostare canShowCallout in quel metodo delegato e non dove si sta facendo in questo momento.)

Anche se si imposta canShowCallout-YES, il richiamo ancora non mostrerà se il title è nil o vuoto.

Registrare il dizionario tmp. O la chiave name è vuota o non esiste.

+0

Grazie mille. Un errore così sciocco. –

+0

@Anna: non esiste una proprietà tiltile per MKPinAnnotationView. come posso fare lo stesso? –

+0

Questo era il problema anche per me. – instanceof

9

È necessario implementare il metodo MKMapViewDelegate mapView:viewForAnnotation:, che crea la vista e la restituisce. In questo metodo chiama [view setCanShowCallout:YES]; nella vista che si intende restituire per l'annotazione.

Poiché il mapView:didSelectAnnotationView: viene chiamato DOPO che il pin è stato selezionato, non avrà alcun effetto sull'attivazione/disattivazione del richiamo.

+0

Grazie, mi mancava quel codice. Sfortunatamente sto ancora avendo il problema. Sembra che il 'pin.title' non sia impostato correttamente, come se provassi a stamparlo solo dopo averlo impostato, solo prings' (null) ' –

+0

Scusa, ignoralo completamente, dovresti accettare l'altra risposta dato che è assolutamente corretto. :) –

Problemi correlati