Я хочу получить текущее местоположение устройства. Код нормально работает. Это дает местоположение, если пользователь не изменил статус авторизации приложения для службы определения местоположения. Я также могу проверить, отказал ли пользователь в разрешении на службу определения местоположения.
Проблема возникает, когда пользователь отменяет авторизацию приложения для использования службы определения местоположения, а затем снова авторизует. В этом случае, после этого, если я попытаюсь получить местоположение, он выдает nil
, хотя он вызывал
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
метод делегата со статусом 3
, т.е. kCLAuthorizationStatusAuthorized
.
Код для получения текущего местоположения:
CLLocation * location = self.locationManager.location;
Метод получения:
- (CLLocationManager *)locationManager
{
if (!locationManager)
{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
}
return locationManager;
}
Метод делегата CLLocationManager:
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
DLog(@"Location authorization changed : %d", status);
// If user has denied permission for location service
if (status == kCLAuthorizationStatusDenied)
{
DLog(@"Location service denied.");
// If authorization status changed method is already called, then SDK will not call again on same object.
// Thus, set CLLocationManager object to nil so that next time we try to get location, it will create a new object,
// and that will send message about authorization status changed.
self.locationManager.delegate = nil;
self.locationManager = nil;
}
else if (status == kCLAuthorizationStatusNotDetermined)
{
// If authorization status changed method is already called, then SDK will not call again on same object.
// Thus, set CLLocationManager object to nil so that next time we try to get location, it will create a new object,
// and that will send message about authorization status changed.
self.locationManager.delegate = nil;
self.locationManager = nil;
}
else if (status == kCLAuthorizationStatusAuthorized)
{
}
}
Любая идея об этом?
locationManager
- вы уверены, что это срабатывает, когда вы устанавливаетеself.locationServiceDisabled = false
? - person Paulw11   schedule 01.04.2014self.locationServiceDisabled
больше не используется. Я обновил свой код, о котором идет речь. - person Geek   schedule 01.04.2014CLLocation * location = self.locationManager.location;
строке. - person Geek   schedule 01.04.2014