Comment afficher l'emplacement de l'utilisateur dans MapKit?

voix
3

Je voudrais afficher le point pulsant bleu pour l'emplacement d'un utilisateur. Je fais ça:

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

Mais je reçois finalement

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

Dois-je faire cela d'une autre façon?

-- MODIFIER --

Je fais aussi ce qui est là que je reçois finalement l'exception ci-dessus:

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

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

établissement est une classe personnalisée que j'ai sur AddressNote. Lorsque l'établissement a une valeur, l'exception se produit. Si je ne mets pas ShowsUserLocation, tout fonctionne bien, mais bien sûr, je ne vois pas l'emplacement de l'utilisateur.

Créé 14/03/2010 à 20:02
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
15

Lorsque le viewForAnnotationest demandé, vous devez vérifier si oui ou non l'annotation donnée correspond à l'emplacement de l' utilisateur actuel. Si oui, retour nul, sinon retourner votre propre 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] une autre façon est de vérifier le type de la classe de l'annotation:

- (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.

Créé 16/03/2010 à 10:05
source utilisateur

voix
8

Je ne sais pas quel est le problème réel est, mais vous n'avez pas besoin de le faire sur chaque mise à jour. Définir une fois après avoir créé la mapView, et vous devriez être en affaires.

mapView.showsUserLocation = YES;

Vous devrez peut-être pour zoomer sur la carte de la région où l'utilisateur est en fait, pour le point d'être visible.

Créé 14/03/2010 à 20:07
source utilisateur

voix
0

Vous utilisez la mauvaise méthode de délégué. Pour MapView, vous devez utiliser cette méthode de délégué pour attraper l'emplacement de l'utilisateur:

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
}
Créé 05/05/2011 à 00:49
source utilisateur

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