У меня проблема, когда locationManager:didChangeAuthorizationStatus
не вызывается после того, как пользователь (1) принимает или (2) отклоняет мой запрос на использование служб определения местоположения. Разместив разные операторы NSLog
, я пришел к выводу, что метод вызывается, когда я запрашиваю авторизацию, но не тогда, когда пользователь делает выбор. У кого-то были такие же проблемы? Если да, то как вы их решили?didChangeAuthorizationStatus не вызывается после изменения статуса
Вот как я инициализировать мой location manager
:
if (_locationManager == nil) {
NSLog(@"Creating location manager");
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
_locationManager.distanceFilter = kCLDistanceFilterNone;
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
}
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) {
NSLog(@"Not determined");
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"dynamicNotifOn"]) {
[_locationManager requestAlwaysAuthorization];
} else {
[_locationManager requestWhenInUseAuthorization];
}
} else if (...) {...
и вот метод:
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
NSLog(@"Callback");
if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) {
NSLog(@"Authorized");
[_mainButton setIsLoading:NO];
[self startGettingLocation];
} else if (status == kCLAuthorizationStatusDenied || status == kCLAuthorizationStatusRestricted) {
NSLog(@"Denied");
_currentState = CurrentStateError;
[_mainButton setUpButtonForState:_currentState];
}
}
После нажатия кнопки, которая инициализирует менеджер местоположения (верхний код-блок), это что печатает консоль:
Creating location manager
Not determined
Callback
И затем я делаю выбор в AlertView, что всплывает:
*nothing*
Привет, и спасибо за ваш ответ. Я сделал это изменение, но я все еще борюсь с той же проблемой. После того, как пользователь принимает или отклоняет мой запрос, метод не вызывается. – Aleksander
И нет, они не обновляют элементы интерфейса - он просто запускает таймер и обновляет местоположение. Мой оператор печати также не вызывается. Я попытаюсь отправить его в основную очередь, но чтобы убедиться, что это работает. – Aleksander
Как вы объявляете свойство locationManager? Есть ли шанс, что он был выпущен? – Paulw11