J'ai un bouton qui utilise l'emplacement de l'utilisateur pour rechercher autour d'eux. Si elles n'ont pas accordé/refusé la permission d'utiliser leur emplacement encore, il demande l'autorisationApp se bloque lors de la demande de localisation et l'utilisateur ne fait rien
Code pertinent:
func updateLocationStatus(){
locationEnabled = CLLocationManager.locationServicesEnabled()
appLocationEnabled = CLLocationManager.authorizationStatus()
}
@IBAction func searchNearby(sender: UIButton) {
updateLocationStatus()
if appLocationEnabled == CLAuthorizationStatus.Denied {
//Show an alert to let them know they've denied location permissions
presentViewController(alert, animated: true, completion: nil)
}
else if appLocationEnabled == CLAuthorizationStatus.NotDetermined ||
appLocationEnabled != CLAuthorizationStatus.AuthorizedWhenInUse &&
appLocationEnabled != CLAuthorizationStatus.AuthorizedAlways{
locationManager.requestWhenInUseAuthorization()
}
else{
activityIndicator.startAnimating()
locationManager.requestLocation()
}
}
Il fonctionne très bien quand il est utilisé normalement. Toutefois, si vous laissez l'alerte "Autoriser l'application à utiliser votre emplacement [Ne pas autoriser] [Autoriser]" à rester là pendant environ 5 secondes, l'application se bloque. La ligne a sauté à l'Xcode origine de l'erreur est
locationManager.requestWhenInUseAuthorization()
et l'erreur fournie est
Fil 1: EXC_BAD_ACCESS (code = 2, adresse = 0xsomeaddress)
J » t même savoir où commencer à résoudre ce problème parce que l'erreur ne me dit rien et la fonctionnalité fonctionne parfaitement bien, sauf lorsque vous ne faites rien trop longtemps
Le backtrace fournit-il des informations utiles? –
Oui, c'est vraiment le cas. Il s'avère que depuis que j'appelle cette fonction tant que l'autorisation n'est pas déterminée, la fonction searchNearby est appelée à plusieurs reprises lorsque la boîte de dialogue apparaît jusqu'à ce qu'un débordement de pile se produise. Je pensais que les instructions se dérouleraient séquentiellement (ie l'exécution du code s'arrête sur requestAuthorization jusqu'à ce qu'une réponse soit déterminée) mais il semble que ce ne soit pas le cas. Merci pour votre suggestion, je n'ai jamais su que backtrace était une chose dans xcode. S'il vous plaît répondez comme une réponse afin que je puisse l'accepter –