2016-02-12 63 views
1

我的應用程序中的位置服務在第一次運行時不起作用。第二次,然後任何時候,它都可以正常工作。這裏是我的代碼:didUpdateLocation不是第一次運行

- (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); 
} 

回答

3

的問題是,requestAlwaysAuthorization異步運行,所以你的代碼檢查授權,並呼籲startUpdatingLocation之前授權已經被用戶給出將執行。這就是爲什麼它會第二次工作,因爲他們第一次給了許可。你可以做的是在代理上執行locationManager:didChangeAuthorizationStatus:,並在那裏調用startUpdatingLocation(如果狀態更改爲授權)。

Apple docs

在當前授權狀態 kCLAuthorizationStatusNotDetermined,這種方法異步運行 並提示用戶將權限授予該應用使用位置 服務