Cómo mostrar la ubicación del usuario en MapKit?

votos
3

Me gustaría ver el punto palpitante azul para la ubicación de un usuario. Estoy haciendo esto:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation    *)newLocation fromLocation:(CLLocation *)oldLocation{
//some other stuff here
[self.mapView setShowsUserLocation:YES];
}

Pero con el tiempo me sale

-[MKUserLocation establishment]: unrecognized selector sent to instance 0x125e90

Debería estar haciendo esto de otra manera?

- Editar -

También estoy haciendo esto, que es donde finalmente consigo la excepción anterior:

- (MKAnnotationView *) mapView:(MKMapView *)_mapView viewForAnnotation:(AddressNote *) annotation{

if(annotation.establishment != nil){
//do something}

establecimiento es una clase personalizada que tengo en AddressNote. Cuando establecimiento tiene un valor, se produce la excepción. Si no me puse ShowsUserLocation, todo funciona bien, pero por supuesto, no veo la ubicación del usuario.

Publicado el 14/03/2010 a las 20:02
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
15

Cuando el viewForAnnotationse solicita, es necesario comprobar tiempo o no la anotación dada corresponde a la ubicación actual del usuario. Si es así, volver a cero, de lo contrario devolver su propia annoationView normal.

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation {
    if (annotation==self.mapView.userLocation)
        return nil;
    //then the rest of your code for all your 'classic' annotations.

[EDIT] una forma alternativa es comprobar el tipo de la clase de la anotación:

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotation {
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;
    //then the rest of your code for all your 'classic' annotations.

Respondida el 16/03/2010 a las 10:05
fuente por usuario

votos
8

No está seguro de cuál es el problema real es, pero no es necesario hacerlo en cada actualización. Establecer que una vez después de crear el mapView, y que debe estar en el negocio.

mapView.showsUserLocation = YES;

Puede que tenga que ampliar el mapa de la región en la que el usuario realmente es, en su punto para ser visible.

Respondida el 14/03/2010 a las 20:07
fuente por usuario

votos
0

Estás usando el método delegado mal. Para MapView, se debe utilizar este método delegado para atrapar la ubicación del usuario:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
}
Respondida el 05/05/2011 a las 00:49
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more