148 votes

L'emplacement actuel de l'autorisation de dialogue disparaît trop vite

Mon appli prend l'emplacement de l'utilisateur, d'obtenir les coordonnées , et fournit une distance ou de leur origine ou de destination. Toutes ces destinations possibles sont affichés dans une vue de la table, donc je suis les utilisateurs coordonne en même temps que le remplissage de la table. Le seul truc, c'est que l'affichage des alertes qui demande la position s'affiche puis disparaît si rapidement, qu'il est impossible de cliquer dessus!

Est-il possible de manuellement présenter cette alerte lors de la première application des charges? J'ai essayé de faire la localisation de l'utilisateur lors de l'application des charges allant jusqu'à tenter de forcer l'alerte à montrer, mais cela ne fonctionne pas.

593voto

Zoli Points 1396

Bien que difficile à suivre, la solution est assez simple.

Après beaucoup d'essais et d'erreurs, j'ai découvert que, bien que l'accès à la localisation de dialogue s'affiche lorsque vous essayez d'accéder à tous les services de localisation dans l'application pour la première fois, la boîte de dialogue disparaît sur son propre (sans aucune interaction de l'utilisateur) si l' CLLocationManager objet est libéré avant que l'utilisateur répond à la boîte de dialogue.

J'ai été la création d'un CLLocationManager exemple, dans mon viewDidLoad méthode. Étant donné que c'était une instance locale de la méthode, l'instance a été publié par l'ARC après la méthode complété en cours d'exécution. Dès que l'instance a été libéré, la boîte de dialogue disparu. La solution est plutôt simple. Modifier l' CLLocationManager exemple d'une méthode de niveau variable à une classe de niveau variable d'instance. Maintenant l' CLLocationManager instance est sorti seulement une fois que la classe est déchargé.

4voto

Suresh Points 2562

Je sais que c'est un très retard de réponse. Mais il peut aider quelqu'un. J'ai aussi été confronté au même problème et a passé une heure à identifier le problème. Au début, mon code était comme ça.

CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];

CLLocation *location = locationManager.location;
//my stuff with the location

    [locationManager release];

Maintenant, l'emplacement d'alerte disppeared rapidement. Quand j'ai dé-commenter la dernière ligne qu'il fonctionne correctement.

   // [locationManager release];

4voto

Ariel Points 1817

Je tombe sur le même problème (au moins par des symptômes). Dans mon cas, le problème était dans l' - (void)applicationWillResignActive:(UIApplication *)application; méthode, où je rejetais ma CLLocationManager exemple dans le cadre de la préparation à la transition d'arrière-plan. Quand je l'ai enlevé et laissé seulement en - (void)applicationDidEnterBackground:(UIApplication *)application; le problème a disparu.
La partie délicate est que l'Emplacement de Noyau d'alerte FAIRE suspendre votre application alors qu'il est encore au premier plan.
Espérons que cela vous aidera, m'a pris beaucoup de temps pour trouvé l'enfoiré :)

3voto

namannik Points 21

J'ai rencontré ce problème, aussi, mais la solution dans mon cas s'est avéré être complètement différente de la accepté de répondre.

Dans mon application, j'ai été en appelant stopUpdatingLocation de applicationWillResignActive. C'était un problème parce qu' applicationWillResignActive est appelée lorsque l'autorisation de dialogue s'affiche. Cela provoquait stopUpdatingLocation immédiatement après l' startUpdatingLocation, c'est pourquoi le dialogue serait immédiatement disparaître.

La solution était tout simplement de l'appeler stopUpdatingLocation de applicationDidEnterBackground à la place.

0voto

Gotschi Points 1452

Vous pouvez utiliser la

+(CLAuthorizationStatus)authorizationStatus

en iOS4.2 et au-dessus

voir ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: