Предупреждение 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;
}

}