CLLocationManager不能一直工作(iOS 8,Xcode 6)

委托方法基本上是一半的时间

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

根本没有被召唤。 但另一半时间它完美运作! 我发现它通常发生在我关闭并退出它之后第一次启动Xcode时,但之后在那之后或者几次运行之后它似乎工作正常。 我不是百分百肯定,如果它只是一个Xcode问题或什么,我很快就会获得开发人员的许可证,所以我会看看它是否能在实际设备上正常工作。

从viewDidAppear开始(在viewDidLoad中尝试也没有区别),我运行一个方法来初始化我的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]; 

有时候这种方法有效,有时则不然。 我甚至做了一个计时器,每隔一秒钟重新运行一次,这不起作用。

还有什么我应该做的吗? 这个问题有什么答案吗?

谢谢。

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

仅当新位置可用时才调用此委托方法。 有时gps不会获得卫星信号,因此无法获得位置。 因此在这些情况下,上述方法不会被触发。 由于您在模拟器中进行测试,因此您应该更改或设置位置。 我认为它可以在实际设备上正常工作。

在viewdidappear中添加

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

并设置在infoplist中。 NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription