66 votes

didUpdateLocations au lieu de didUpdateToLocation

Avec la sortie d'iOS6, Apple souhaite que nous utilisions didUpdateLocations au lieu de didUpdateToLocation. Quelqu'un peut-il expliquer comment utiliser correctement didUpdateLocations?

127voto

Anne Points 16250

Je suppose que vous avez utilisé le délégué suivant pour obtenir le dernier poste?

 - (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
           fromLocation:(CLLocation *)oldLocation
 

Le délégué ci-dessus est obsolète dans iOS 6. À présent, il convient d'utiliser les éléments suivants:

 - (void)locationManager:(CLLocationManager *)manager 
     didUpdateLocations:(NSArray *)locations
 

Pour obtenir la dernière position, obtenez simplement le dernier objet du tableau:

 [locations lastObject]
 

En d'autres termes, [locations lastObject] (nouveau délégué) est égal à newLocation (ancien délégué).

65voto

progrmr Points 32412

Aucune des autres réponses ici expliquer pourquoi il y a un emplacement de tableau et comment utiliser correctement la nouvelle didUpdateLocations: array qui est fourni.

Le but de la dépréciation de l' locationManager:didUpdateToLocation:fromLocation: et l'envoi d'un NSArray des emplacements est de réduire la consommation d'énergie lors de l'exécution en arrière-plan.

Depuis l'iPhone 5, la puce GPS a la capacité de stocker des emplacements pour une période de temps et ensuite de les livrer à la fois dans un tableau. Ceci est appelé différés emplacement des mises à jour. Cela permet au PROCESSEUR principal de dormir pendant une longue période de temps alors que dans le fond. Cela signifie iOS n'avez pas à démarrer le PROCESSEUR principal pour chaque mise à jour de position, le CPU peut de sommeil, tandis que la puce GPS recueille des lieux.

Vous pouvez vérifier cette capacité à l'aide de l' deferredLocationUpdatesAvailable méthode. Si disponible, vous pouvez l'activer à l'aide d' allowDeferredLocationUpdatesUntilTraveled:timeout: méthode. Certaines conditions s'appliquent, voir cette réponse pour plus de détails.

22voto

Janak Nirmal Points 15980

Il vous donne un tableau d'objets pour accéder au dernier emplacement que vous pouvez utiliser

 [locations lastObject]
 

à partir de cette méthode déléguée

 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
 

7voto

Filip Points 2856

C’est ainsi que la méthode peut être mise en œuvre pour fonctionner de la même manière que la méthode déconseillée.

 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *newLocation = locations.lastObject;
    CLLocation *oldLocation;
    if (locations.count > 1) {
        oldLocation = locations[locations.count - 2];
    }
}
 

3voto

Mustafa Points 667

Si vous prenez en charge à la fois iOS 5 et 6, vous devez appeler

 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations, 
 

des plus vieux

 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
 

fonction, en construisant un éventail d'emplacements.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X