Вам нужно начать с проверки locationServicesEnabled
. Если они включены, перед вызовом authorizationStatus
узнайте фактический статус авторизации вашего приложения. Вы запрашиваете диалог авторизации, только если статус «не определен».
Если статус - что-то еще, нет смысла спрашивать диалог авторизации; это не появится
Другая проблема в том, что этот код бесполезен:
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
CLLocation *currentLocation = [locations lastObject];
if(currentLocation != nil){
self.latLabel.text = [NSString stringWithFormat:@"%.2f",currentLocation.coordinate.latitude];
self.longLabel.text = [NSString stringWithFormat:@"%.2f",currentLocation.coordinate.longitude];
[self.locationManager stopUpdatingLocation];
}
}
Вы звоните stopUpdatingLocation
, как только вы получите первое обновление местоположения. Но шансы на получение полезного местоположения при первом обновлении местоположения first в основном равны нулю, поскольку датчики только разогреваются.
(Также обратите внимание, что проверять «Обновления местоположения» в фоновых режимах бессмысленно. Вы не получите никаких обновлений местоположения в фоновом режиме, если вы не установили для allowsBackgroundLocationUpdates
диспетчера местоположений значение YES, и вы этого не делаете .)