2010-04-07 19 views
6

Si je veux montrer userLocation sur la carte, et en même temps record de l'emplacement de l'utilisateur, est-il une bonne idée d'ajouter un observateur à userLocation.location et enregistrer les emplacements, OU AURAIT J'utilise toujours CLLocationManager pour enregistrer l'emplacement de l'utilisateur et utiliser mapView.showUserLocation pour afficher l'emplacement actuel de l'utilisateur (indicateur bleu)? Je souhaite afficher l'indicateur bleu par défaut pris en charge par l'API MapKit.iPhone développement - CLLocationManager contre MapKit

De plus, voici un code rugueux exemple:

- (void)viewDidLoad { 
    ... 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = DISTANCE_FILTER_VALUE; 
    locationManager.delegate = self; 
    [locationManager startUpdatingLocation]; 

    myMapView.showUserLocation = YES; 
    [myMapView addObserver:self forKeyPath:@"userLocation.location" options:0 context:nil]; 

    ... 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { 
    // Record the location information 
    // ... 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 
    NSLog(@"%s begins.", __FUNCTION__); 

    // Make sure that the location returned has the desired accuracy 
    if (newLocation.horizontalAccuracy <= manager.desiredAccuracy) 
     return; 

    // Record the location information 
    // ... 
} 

Sous le capot, je pense que MKMapView utilise également CLLocationManager pour obtenir l'emplacement actuel de l'utilisateur? Alors, cela va-t-il créer des problèmes parce que je crois que CLLocationManager et MapView essaieront d'utiliser les mêmes services de localisation? Y aura-t-il des conflits et un manque de données précises/requises ou à jour?

Répondre

1

Voir cette SO entry: CLLocationManager utilise les mêmes données dans l'ensemble de ses instances, donc il n'y a pas de conflit.

+1

Mais si nous fixons showUserLocation TRUE et créer un CLLocationManager dans notre classe personnalisée, nous faisant essentiellement deux instances de CLLocationManager - dont l'une par MKMapView et un dans votre classe personnalisée. Qui obtiendra les mises à jour de localisation? L'observateur sur userLocation.location ou la méthode didUpdateLocation: delegate? Si je commence à enregistrer les emplacements dans ces deux endroits, les lieux enregistrés seront-ils synchronisés? – Mustafa

+2

Apparemment, vous pouvez avoir plusieurs gestionnaires de position et ils vous donneront des informations précises. Bien que MapKit utilise également CLLocationManager sous le capot, la création d'un CLLocationManager et l'utiliser avec MapKit ne crée aucun conflit. – Mustafa