[英]didUpdateLocation not called first time run
我的应用中的定位服务在您首次运行时无法正常工作。 第二次以及之后的任何时间,它都可以正常工作。 这是我的代码:
- (void)viewDidLoad {
[super viewDidLoad];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.allowsBackgroundLocationUpdates = true;
[locationManager requestAlwaysAuthorization];
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedAlways ||
[CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse) {
[locationManager startUpdatingLocation];
}
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
latitude = locationManager.location.coordinate.latitude;
longitude = locationManager.location.coordinate.longitude;
NSLog(@"New Location. Lat: %f, Long: %f", latitude, longitude);
}
问题是requestAlwaysAuthorization
是异步运行的,因此在用户授予授权之前,将执行检查授权并调用startUpdatingLocation
代码。 这就是为什么第二次可以使用的原因,因为他们是第一次给予许可。 您可以做的是在委托上实现locationManager:didChangeAuthorizationStatus:
startUpdatingLocation
在那里也调用startUpdatingLocation
(如果状态更改为授权)。
来自Apple文档
当当前授权状态为kCLAuthorizationStatusNotDetermined时,此方法异步运行,并提示用户向应用授予使用位置服务的权限
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.