Meu aplicativo pega a localização do usuário, obtém as coordenadas e fornece uma distância de ou para seu destino ou origem. Todos esses destinos possíveis são mostrados em uma exibição de tabela, por isso estou coordenando os usuários ao mesmo tempo em que preenche a tabela. A única coisa é que a exibição de alerta que solicita a localização dos usuários aparece e desaparece tão rapidamente que é impossível clicar nela!
Existe alguma maneira de apresentar este alerta manualmente quando o aplicativo é carregado pela primeira vez? Tentei obter a localização do usuário quando o aplicativo é carregado para tentar forçar a exibição do alerta, mas isso não funcionou.
fonte
Mesmo sintoma, causa diferente: não ligue
startUpdatingLocation
mais de uma vez seguidas .Estruturei acidentalmente coisas de tal forma que o código estava involuntariamente chamando
startUpdatingLocation
duas vezes seguidas, o que é aparentemente ruim. Também poderia ter algo a ver com a escolha da fila, já que eu estava esperando para começar a atualizar enquanto aguardava o resultado de uma solicitação de rede, mas não precisava fazer nenhuma mágica do GCD para corrigi-la ... só precisava ter certeza de que não repetiu o início.Espero que alguém seja capaz de se beneficiar da minha dor. :)
fonte
Eu enfrentei a situação semelhante. Após a depuração, encontrei
é chamado em um escopo de método, mas deve ser chamado globalmente.
Por quê?
Em poucas palavras, o locationManager foi lançado após o retorno do método. Mas não deve ser liberado até que o usuário dê ou negue permissão
fonte
Caí no mesmo problema (pelo menos por sintomas). No meu caso, o problema estava no
- (void)applicationWillResignActive:(UIApplication *)application;
método, onde eu estava liberando minhaCLLocationManager
instância como parte da preparação para a transição em segundo plano. Quando eu removi e deixei apenas no- (void)applicationDidEnterBackground:(UIApplication *)application;
problema se foi.A parte complicada é que o alerta de localização principal suspende seu aplicativo enquanto ele ainda está em primeiro plano.
Espero que ajude você, demorei muito tempo para encontrar aquele bastardo :)
fonte
Eu sei que esta é uma resposta muito tardia. Mas isso pode ajudar alguém. Também enfrentei o mesmo problema e passei uma hora para identificar o problema. No começo, meu código era assim.
Agora, o alerta de localização desapareceu rapidamente. Quando descomente a última linha, ela está funcionando corretamente.
fonte
Também encontrei esse problema, mas a solução no meu caso acabou sendo completamente diferente da resposta aceita.
No meu aplicativo, eu estava ligando
stopUpdatingLocation
deapplicationWillResignActive
. Este foi um problema porqueapplicationWillResignActive
é chamado quando a caixa de diálogo de permissão é exibida. Isso estava causandostopUpdatingLocation
imediatamente depoisstartUpdatingLocation
, razão pela qual a caixa de diálogo desapareceu imediatamente.A solução era simplesmente ligar
stopUpdatingLocation
deapplicationDidEnterBackground
vez.fonte
Isso estava acontecendo comigo enquanto usava o iOS Simulator. Eu determinei que isso estava ocorrendo porque meu Esquema de Execução estava simulando um local. Eu acho que isso tem o mesmo efeito que chamar
locationManager.startUpdatingLocation()
no lançamento e por isso estava fechando a caixa de diálogo.Desmarcar a caixa de seleção "Permitir simulação de local" na caixa de diálogo Editar esquemas corrigiu o problema. Uma vez que funcione como você deseja e com a permissão definida, você poderá reativar a simulação do local e o simulador funcionará bem a partir de então.
fonte
Swift 4 e iOS 11 :
Certifique-se de adicionar linhas de privacidade ( sempre e quandoInutilizar ) ao seu
.plist
arquivo e adicionarCoreLocation
Framework ao seu projetoA caixa de diálogo de permissão de local aparece corretamente quando eu mudei:
com:
PS .: Tentei TODOS os conselhos e todas as falhas (solicite autorização para
viewDidLoad
, emvar
vez delet
para locationManager, não iniciestartUpdatingLocation()
após solicitação .. Acho que é um bug e espero que o resolvam o mais rápido possível ..fonte
A solução SWIFT 4 @Zoli terá a seguinte aparência:
fonte
você mais define a variável locationManager como objeto global.
fonte
Eu conheci a mesma situação sua.
fonte