CLLocationManager ne fonctionne pas tout le time (iOS 8, Xcode 6)

Fondamentalement, la moitié du time, la méthode du délégué

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

n'est pas appelé du tout. Mais l'autre moitié du time cela fonctionne parfaitement! J'ai constaté que cela se produit généralement lorsque je démarre Xcode pour la première fois après l'avoir fermé et que je l'ai quitté, mais après cela, ou après quelques tours, cela semble fonctionner correctement. Je ne suis pas sûr à 100% si c'est juste un problème Xcode ou quoi, je vais bientôt get une licence de développeur, donc je vais voir si cela fonctionnera bien sur un appareil réel.

A partir de viewDidAppear (essayé dans viewDidLoad aussi, pas de différence), je lance une méthode pour init mon truc de locationManager:

 locationManager = [[CLLocationManager alloc]init]; [locationManager setDelegate:self]; locationManager.distanceFilter = 20.0f; locationManager.desiredAccuracy = kCLLocationAccuracyBest; locationManager.pausesLocationUpdatesAutomatically = NO; if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) [locationManager requestAlwaysAuthorization]; [locationManager startUpdatingLocation]; 

Parfois, cela fonctionne, parfois non. J'ai même fait une timer pour ré-exécuter ce toutes les secondes un-et-si, et cela ne fonctionne pas.

Y a-t-il autre chose que je devrais faire? Y a-t-il une réponse à ce problème?

Merci.

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

Cette méthode de délégué est appelée uniquement si de nouveaux locations sont disponibles. Parfois, le GPS n'obtient pas de signal satellite, d'où l'impossibilité d'get des locations. Donc, dans ces situations, la méthode mentionnée ci-dessus ne sera pas déclenchée. Puisque vous testez en simulateur, vous devez changer ou définir l'location. Je pense que cela fonctionnera bien sur un appareil réel.

append dans viewdidappear

 _locamangr = [CLLocationManager new]; _locamangr.delegate = self; // _locamangr.distanceFilter = kCLDistanceFilterNone; _locamangr.desiredAccuracy = kCLLocationAccuracyBest; if ([_locamangr respondsToSelector:@selector(requestAlwaysAuthorization)]) { [_locamangr requestAlwaysAuthorization] ; [_locamangr requestWhenInUseAuthorization]; } [_locamangr startUpdatingLocation]; 

et défini dans infoplist. NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription