Я вызываю текущее местоположение всякий раз, когда пользователь входит в систему, и в нескольких других местах. Всякий раз, когда я это делаю, появляется предупреждение, запрашивающее разрешение у пользователя на секунду или около того, а затем оно исчезает. И, очевидно, я не могу найти место. это происходит каждый раз, когда я запрашиваю местоположение. Он не позволяет пользователю нажать "Отмена" или "ОК". Пожалуйста, помогите
Предупреждение CLLocationManager, которое будет отклонено самостоятельно
Ответ 1
Вероятно, вы не сохранили locationManager. Как следствие, когда вы вызывали [CLLocationManager startUpdatingLocation]
, было показано предупреждение, но оно исчезает, как только вызывается диспетчер locationManager. Это случилось со мной однажды, когда я набрал назначение вместо сильного в свойство, которое я создал для моего экземпляра locationManger.
Ответ 2
В моем проекте я столкнулся с той же проблемой (swift lang).
попробуйте это, объявите переменную CLLocationmanage как глобальную переменную и вызовите туда, где хотите.
Пример:
var locManager = CLLocationManager()
override func viewDidLoad()
{
super.viewDidLoad()
let iOS7 = floor(NSFoundationVersionNumber) <= floor(NSFoundationVersionNumber_iOS_7_1)
let iOS8 = floor(NSFoundationVersionNumber) > floor(NSFoundationVersionNumber_iOS_7_1)
locManager.delegate = self
locManager.desiredAccuracy = kCLLocationAccuracyBest
if(iOS8)
{
locManager.requestAlwaysAuthorization()// only support ios 8.0
}
}
Ответ 3
Попробуйте переместить метод set делегата после startUpdatingLocation. Меня устраивает. Пример:
CLLocationManager *m = [[CLLocationManager alloc] init];
[m startUpdatingLocation];
m.delegate = self;
Opz, мой плохой английский.
Ответ 4
Я не могу прокомментировать его сообщение, поэтому я отвечаю здесь.
Джанлука Траншедон прав. В моем случае я сохранил CLLocationManager. НО: он запускает первый обратный вызов, сразу после показа AlertView, чтобы сообщить делегату, что статус не определен. Я сделал ошибку, чтобы освободить экземпляр, когда какой-либо ответ был получен.
Вот как выглядит метод, и он работает:
-(void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
switch (status) {
case kCLAuthorizationStatusNotDetermined:
break;
default:
_locationManagerForAuthorizationRequest.delegate = nil;
self.locationManagerForAuthorizationRequest = nil;
}
}