Mon application prend la position de l'utilisateur, obtient les coordonnées et fournit une distance depuis ou vers sa destination ou son origine. Toutes ces destinations possibles sont affichées dans une vue de tableau, donc j'obtiens les coordonnées des utilisateurs en même temps que le remplissage du tableau. La seule chose est que la vue d'alerte qui demande l'emplacement des utilisateurs apparaît puis disparaît si rapidement qu'il est impossible de cliquer dessus!
Existe-t-il un moyen de présenter manuellement cette alerte lors du premier chargement de l'application? J'ai essayé d'obtenir l'emplacement de l'utilisateur lorsque l'application se charge pour essayer de forcer l'alerte à s'afficher, mais cela n'a pas fonctionné.
la source
Même symptôme, cause différente: ne pas appeler
startUpdatingLocation
plus d'une fois de suite .J'ai eu accidentellement des choses structurées de telle sorte que le code appelait involontairement
startUpdatingLocation
deux fois de suite, ce qui est apparemment mauvais. Cela pouvait aussi avoir quelque chose à voir avec le choix de la file d'attente puisque j'attendais de commencer la mise à jour en attendant le résultat d'une demande réseau, mais je n'avais pas besoin de faire de magie GCD pour le réparer ... juste besoin de m'assurer que je n'a pas répété le début.J'espère que quelqu'un pourra profiter de ma douleur. :)
la source
J'ai fait face à la situation similaire. Après le débogage, j'ai trouvé
est appelée dans une portée de méthode, mais elle doit être appelée globalement.
Pourquoi?
En un mot, locationManager a été publié après le retour de la méthode. Mais il ne devrait pas être publié tant que l'utilisateur n'a pas donné ou refusé l'autorisation
la source
Je tombe dans le même problème (au moins par les symptômes). Dans mon cas, le problème était dans la
- (void)applicationWillResignActive:(UIApplication *)application;
méthode, où je publiais monCLLocationManager
instance dans le cadre de la préparation de la transition en arrière-plan. Quand je l'ai enlevé et laissé seulement dans- (void)applicationDidEnterBackground:(UIApplication *)application;
le problème est parti.La partie délicate est que l'alerte Core Location suspend votre application alors qu'elle est encore au premier plan.
J'espère que cela vous aidera, il m'a fallu beaucoup de temps pour fonder ce salaud :)
la source
Je sais que c'est une réponse très tardive. Mais cela peut aider quelqu'un. J'ai également fait face au même problème et j'ai passé une heure à identifier le problème. Au début, mon code était comme ça.
Maintenant, l'alerte de localisation a disparu rapidement. Lorsque je décommente la dernière ligne, cela fonctionne correctement.
la source
J'ai également rencontré ce problème, mais la solution dans mon cas s'est avérée complètement différente de la réponse acceptée.
Dans mon application, j'appelais
stopUpdatingLocation
depuisapplicationWillResignActive
. C'était un problème car ilapplicationWillResignActive
est appelé lorsque la boîte de dialogue d'autorisation apparaît. Cela provoquaitstopUpdatingLocation
immédiatement aprèsstartUpdatingLocation
, c'est pourquoi le dialogue disparaîtrait immédiatement.La solution était simplement d'appeler
stopUpdatingLocation
à laapplicationDidEnterBackground
place.la source
Cela m'est arrivé lors de l'utilisation du simulateur iOS. J'ai déterminé que cela se produisait parce que mon programme d'exécution simulait un emplacement. Je pense que cela a le même effet que l'appel
locationManager.startUpdatingLocation()
au lancement et donc cela fermait la boîte de dialogue.Le fait de décocher la case "Autoriser la simulation d'emplacement" dans la boîte de dialogue Modifier les schémas a résolu le problème. Une fois que cela fonctionne comme vous le souhaitez et que l'autorisation est définie, vous pouvez réactiver la simulation de localisation et le simulateur fonctionnera correctement à partir de là.
la source
Swift 4 et iOS 11 :
Assurez-vous d'avoir ajouté des lignes de confidentialité (à la fois toujours et lors de l' utilisation ) à votre
.plist
fichier et ajoutezCoreLocation
Framework à votre projetLa boîte de dialogue d'autorisation de localisation s'affiche correctement lorsque j'ai changé:
avec:
PS .: J'ai essayé TOUS les conseils et tout échoue (demander l'autorisation à
viewDidLoad
,var
au lieu delet
pour locationManager, ne pas démarrerstartUpdatingLocation()
après la demande ... Je pense que c'est un bogue et j'espère qu'ils le résoudront le plus rapidement possible.la source
La solution SWIFT 4 @Zoli ressemblera à ceci:
la source
vous définissez le plus la variable locationManager comme objet global.
la source
J'ai rencontré la même situation que la vôtre.
la source