Мое приложение берет местоположение пользователя, получает координаты и обеспечивает расстояние до или от пункта назначения или источника. Все эти возможные пункты назначения показаны в табличном представлении, поэтому я получаю координаты пользователей одновременно с заполнением таблицы. Единственное, что вид предупреждения, который запрашивает местоположение пользователя, появляется, а затем исчезает так быстро, что невозможно щелкнуть по нему!
Есть ли способ вручную представить это предупреждение при первой загрузке приложения? Я попытался определить местоположение пользователя при загрузке приложения, чтобы попытаться вызвать предупреждение, но это не сработало.
источник
Тот же симптом, другая причина: не звонить
startUpdatingLocation
более одного раза подряд .Я случайно структурировал вещи так, что код непреднамеренно вызывал
startUpdatingLocation
дважды подряд, что явно плохо. Это могло также иметь отношение к выбору очереди, так как я ждал начала обновления в ожидании результата сетевого запроса, но мне не нужно было использовать магию GCD, чтобы это исправить ... просто нужно было убедиться, что я не повторить старт.Надеюсь, кто-то сможет извлечь выгоду из моей боли. :)
источник
Я сталкивался с подобной ситуацией. После отладки я нашел
вызывается в области видимости метода, но он должен вызываться глобально.
Зачем?
В двух словах, locationManager был выпущен после возврата метода. Но это не должно быть выпущено, пока пользователь не даст или не запретит разрешение
источник
Я попадаю в ту же проблему (по крайней мере, по симптомам). В моем случае проблема была в
- (void)applicationWillResignActive:(UIApplication *)application;
методе, где я выпускал свойCLLocationManager
экземпляр как часть подготовки к фоновому переходу. Когда я его снял и оставил только- (void)applicationDidEnterBackground:(UIApplication *)application;
проблема исчезла.Сложность в том, что оповещение о базовом местоположении действительно приостанавливает работу вашего приложения, пока оно находится на переднем плане.
Надеюсь, что это поможет вам, у меня ушло много времени, чтобы найти этого ублюдка :)
источник
Я знаю, что это очень поздний ответ. Но это может кому-то помочь. Я также столкнулся с той же проблемой и потратил час, чтобы определить проблему. Сначала мой код был таким.
Теперь оповещение о местонахождении исчезло быстро. Когда я раскомментирую последнюю строку, она работает правильно.
источник
Я тоже столкнулся с этой проблемой, но решение в моем случае оказалось совершенно другим, чем принятый ответ.
В моем приложении я звонил
stopUpdatingLocation
сapplicationWillResignActive
. Это было проблемой, потому чтоapplicationWillResignActive
вызывается, когда появляется диалоговое окно разрешения. Это было причинойstopUpdatingLocation
сразу послеstartUpdatingLocation
, поэтому диалог сразу исчезнет.Решение было просто вызов
stopUpdatingLocation
изapplicationDidEnterBackground
вместо.источник
Это происходило со мной во время использования симулятора iOS. Я определил, что это происходит, потому что моя Схема пробега моделировала местоположение. Я думаю, что это имеет тот же эффект, что и вызов
locationManager.startUpdatingLocation()
при запуске, поэтому диалог закрывался.Снятие флажка «Разрешить моделирование местоположения» в диалоговом окне «Редактирование схем» решило проблему. Как только он будет работать так, как вы хотите, и разрешение будет установлено, вы можете снова включить симуляцию местоположения, и с этого момента симулятор будет работать нормально.
источник
Swift 4 и iOS 11 :
Обязательно добавьте строки конфиденциальности (как всегда, так и whenInUse ) в ваш
.plist
файл и добавьтеCoreLocation
Framework в свой проектДиалог разрешения местоположения отображается правильно, когда я изменился:
с участием:
PS : Я перепробовал ВСЕ советы, и все не удалось (запросить авторизацию
viewDidLoad
,var
а неlet
для locationManager, не запускатьstartUpdatingLocation()
после запроса ... Я думаю, что это ошибка, и я надеюсь, что они исправят ее как можно скорее ..источник
Решение SWIFT 4 @Zoli будет выглядеть так:
источник
Вы больше всего определяете переменную locationManager как глобальный объект.
источник
Я встречал ту же ситуацию, что и ты.
источник