2011-06-20 8 views
7

después de pasar 2 días buscando el error, tengo que pedir ayuda aquí. tengo MapViewController y coloco algunos pines en el mapa. Copié la mayoría del código de MapCallouts y WeatherMap de los ejemplos de código de manzana.MKAnnotationView viewForAnnotation nunca llamado

de todos modos parece que he eliminado o perdido piezas esenciales. parece que no hay conexión entre el MapViewController y el siguiente código

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation 
{ 
    NSLog(@"MKAnnotationView"); 
    return nil; 
} 

establecer una anotación tiene este aspecto y funciona bien:

- (void)createPoi:(CLLocationCoordinate2D)theCoordinate 
{ 
    NSLog(@"createPoi"); 

    RandomAnnotation *randomAnnotation = [[RandomAnnotation alloc] init]; 
    [randomAnnotation setTheCoordinate:theCoordinate]; 
    [randomAnnotation setTheTitle:@"bla"]; 
    [randomAnnotation setTheSubTitle:@"bla"]; 
    [self.mapAnnotations insertObject:randomAnnotation atIndex:kRandomAnnotationIndex]; 
    [randomAnnotation release]; 
    [self.mapView addAnnotation:[self.mapAnnotations objectAtIndex:kRandomAnnotationIndex]]; 
} 

no puedo entender lo que está mal. ¿Alguien podría darme una pista de lo que falta? Debo admitir que no tengo ninguna experiencia con el patrón delegado.

Respuesta

16

Asegúrate de que la propiedad delegate de la vista del mapa esté establecida.

Si el mapa se crea en IB, haga clic derecho en él y conecte su salida de delegado al propietario del archivo.

Si el mapa se crea en el código, establezca el delegado después de crear la vista del mapa:

mapView.delegate = self; 
+0

aah. ¡sí! me olvidé de enganchar el mapa en IB al delegado propietario del archivo. Lástima de mí: -/ problema resuelto! muchas gracias por su ayuda rápida !!! :-) – rockstarberlin

2

En el .h donde se declaró su MKMapView y donde su método viewForAnnotation declarar, asegúrese de agregar MKMapViewDelegate en la lista de protocolos de su clase debe incluir:

@interface myViewController : UIViewController <MKMapViewDelegate> { 
    MKMapView *_mapView; 
} 

Luego, en el método viewDidLoad, asegúrese de añadir

_mapView.delegate = self; 

¡También puede asignar el delegado de mapView en el constructor de interfaz si ya ha hecho cosas al usarlo!

Cuestiones relacionadas