2011-11-20 10 views
12

Tengo un MKMapView anotaciones y yo estoy añadiendo así:MKAnnotation no se muestra en la llamada 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]; 
} 

El MKAnnotation 's se muestran en el mapa bien, y puede seleccionarlos, sin embargo hay aparece una burbuja de llamada. Yo sé que ellos están siendo seleccionados adecuadamente formar esta

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

Pero eso se limita a imprimir

Title:(null) 

estoy usando ARC, y tengo las propiedades establecidas en mi lugar objeto como tal :

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

¿Qué estoy haciendo mal/falta? Gracias.

+0

Antes de la línea 'addAnnotation', ¿puedes NSLog' pin.title' y ver qué muestra? Además, en el objeto Place, anulaste el método 'description' por casualidad y, de ser así, ¿qué código hay allí? – Anna

+0

El 'NSLog (@"% @ ", pin.title);' Solo devuelve '(nulo)'. No entiendo por qué sin embargo. –

Respuesta

40

La llamada no se muestra porque title es nil.

No es necesario implementar viewForAnnotation para mostrar textos destacados, ya que la implementación de la vista de mapa predeterminada muestra textos destacados. (Sin embargo, si haces ponerlo en práctica, debe configurar canShowCallout en ese método delegado y no donde usted lo está haciendo en este momento.)

Aunque ajuste canShowCallout a YES, la llamada aún no se mostrará si el title es nil o en blanco.

Ingrese el diccionario tmp. O bien la clave name está en blanco o no existe.

+0

Muchas gracias. Un error tan tonto. –

+0

@Anna: no hay propiedad tiltile para MKPinAnnotationView. ¿Cómo puedo hacer lo mismo? –

+0

Este fue el problema para mí también. – instanceof

9

Debe implementar el método MKMapViewDelegate mapView:viewForAnnotation:, que crea la vista y la devuelve. En ese método, llame al [view setCanShowCallout:YES]; en la vista que planea devolver para la anotación.

Como se llama al mapView:didSelectAnnotationView: DESPUÉS de que se haya seleccionado el pin, no tendrá ningún efecto en habilitar/deshabilitar la leyenda.

+0

Gracias, me faltaba ese código. Lamentablemente sigo teniendo el problema. Parece que 'pin.title' no se está configurando correctamente, como si tratara de imprimirlo justo después de configurarlo, simplemente pide' (null) ' –

+0

Disculpe, pase por alto eso, debe aceptar la otra respuesta, ya que es absolutamente correcto. :) –

Cuestiones relacionadas