Диалог разрешения текущего местоположения слишком быстро исчезает

Мое приложение принимает местоположение пользователя, получает координаты и обеспечивает расстояние до или от места назначения или от источника. Все эти возможные назначения отображаются в виде таблицы, поэтому я получаю координаты пользователей одновременно с заполнением таблицы. Единственное, что появляется предупреждение, запрашивающее местоположение пользователя, исчезает так быстро, что его невозможно щелкнуть!

Есть ли способ вручную представить это предупреждение, когда приложение загружается первым? Я попытался получить местоположение пользователя, когда приложение загружается, чтобы попытаться показать предупреждение, но это не сработало.

9 Solutions collect form web for “Диалог разрешения текущего местоположения слишком быстро исчезает”

Хотя трудно отследить, решение для этого довольно простое.

Через много проб и ошибок я узнал, что, когда диалог доступа к местоположению появляется, когда вы впервые пытаетесь получить доступ к любым службам местоположения в приложении, диалог исчезает сам по себе (без какого-либо взаимодействия с пользователем), если объект CLLocationManager выпущен перед тем как пользователь откликнется на диалог.

Я создавал экземпляр CLLocationManager в моем методе viewDidLoad . Поскольку это был локальный экземпляр метода, экземпляр был выпущен ARC после завершения выполненного метода. Как только экземпляр был выпущен, диалоговое окно исчезло. Решение было довольно простым. Измените экземпляр CLLocationManager как переменную уровня метода, которая будет переменной экземпляра класса. Теперь экземпляр CLLocationManager освобождается только после разгрузки класса.

Я попадаю в одну и ту же проблему (по крайней мере, по симптомам). В моем случае проблема была в приложении - (void)applicationWillResignActive:(UIApplication *)application; метод, когда я выпускал экземпляр CLLocationManager как часть подготовки к переходу фона. Когда я удалил его и оставил его только в - (void)applicationDidEnterBackground:(UIApplication *)application; проблема ушла.
Сложная часть заключается в том, что предупреждение Core Location DO приостанавливает ваше приложение, пока оно остается на переднем плане.
Надеюсь, что это вам поможет, у меня много времени, чтобы найти этого ублюдка 🙂

Я знаю, что это очень поздний ответ. Но это может помочь кому-то. Я также столкнулся с той же проблемой и потратил час, чтобы определить проблему. Сначала мой код был таким.

 CLLocationManager *locationManager = [[CLLocationManager alloc] init]; [locationManager startUpdatingLocation]; CLLocation *location = locationManager.location; //my stuff with the location [locationManager release]; 

Теперь уведомление о местоположении быстро исчезло. Когда я раскомментирую последнюю строку, она работает правильно.

  // [locationManager release]; 

Тот же симптом, другая причина: не вызывать startUpdatingLocation более одного раза подряд .

Я случайно структурировал такие вещи, что код непреднамеренно вызывал startUpdatingLocation два раза подряд, что, по-видимому, плохо. Возможно, это также имело какое-то отношение к выбору очереди, так как я ждал начала обновления в ожидании результата сетевого запроса, но мне не нужно было делать какую-либо магию GCD, чтобы ее исправить … просто нужно было убедиться, что я не повторил старт.

Надеюсь, кто-то сможет извлечь выгоду из моей боли. 🙂

Я столкнулся с этой проблемой, но решение в моем случае оказалось совершенно иным, чем принятый ответ.

В моем приложении я вызывал stopUpdatingLocation из applicationWillResignActive . Это было проблемой, потому что applicationWillResignActive вызывается, когда появляется диалоговое окно с правами. Это вызывало stopUpdatingLocation сразу после startUpdatingLocation , поэтому диалог немедленно исчезнет.

Решение состояло в том, чтобы просто вызвать stopUpdatingLocation из applicationDidEnterBackground .

Это происходило со мной при использовании iOS Simulator. Я решил, что это происходит потому, что моя схема запуска имитировала местоположение. Я думаю, что это имеет тот же эффект, что и вызов locationManager.startUpdatingLocation() при запуске, и поэтому он закрывает диалог.

Отмена проверки флажка «Разрешить определение местоположения» в диалоговом окне «Редактировать схемы» устранила проблему. Как только он будет работать так, как вы хотите, и разрешение будет установлено, вы можете снова включить симуляцию местоположения, и симулятор будет работать нормально с этого момента.

Swift 4 и iOS 11 :

Обязательно добавьте в свой файл CoreLocation строки конфиденциальности (как всегда, так и inInse ) и добавьте CoreLocation Framework в свой проект

Диалог выбора местоположения отображается правильно, когда я изменил:

 locationManager.requestAlwaysAuthorization() 

с:

 locationManager.requestWhenInUseAuthorization() 

PS .: Я пробовал ВСЕ советы и все терпит неудачу (авторизация запроса viewDidLoad , var вместо let для locationManager, не запускайте startUpdatingLocation() после startUpdatingLocation() думаю, что это ошибка, и я надеюсь, что они разрешат ее как можно скорее как возможно ..

вы чаще определяете переменную locationManager как глобальный объект.

 @interface ViewController : UIViewController { CLLocationManager *locationManager; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; CLLocationManager *locationManager = [[CLLocationManager alloc] init]; [locationManager startUpdatingLocation]; } 

Решение SWIFT 4 @Zoli будет выглядеть так:

 class WhateverViewController: UIViewController { let locationManager = CLLocationManager() // here is the point of the @Zoli answer // some code override func viewDidLoad() { super.viewDidLoad() // some other code locationManager.requestWhenInUseAuthorization() // some other code } } 
Interesting Posts

Core Image – переключатель прозрачный для цвета

NSPredicate что-то эквивалентное SQL GROUP BY

Выйти замуж за Core Animation с помощью OpenGL ES

Swift: Как получить строку перед определенным символом?

Как анализировать приложение iOS для создания твитов в theos

Магическая запись: nil не является законным NSPsistentStoreCoordinator

NSUserDefaults против основных данных для состояния приложения

Как мы назначаем объект в `UINavigationController`, не нажимая на него объект ViewController.?

Использование AVFoundation для сканирования штрих-кодов PDF417

Отладка неперехваченного исключения в Xcode

Если я доволен тем, что OS X работает на VMware, действительно ли мне нужно покупать Mac для разработки в App Store?

Отсутствует идентификатор подписки на распространение iOS / «У сертификата есть недопустимый эмитент»

Отформатированные номера GRMustache или механизм шаблонов HTML с форматированием чисел в iOS

Сравните две строки версии в Swift

Как я могу построить в XCode 4 для цели развертывания iOS 3.1, используя libSystem.B?

PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.