web-dev-qa-db-fra.com

Vérification de l'autorisation d'emplacement et autorisation

Je souhaite que mon programme affiche l'emplacement des utilisateurs sur la carte. Il fonctionnait au début puis s'est arrêté au hasard. J'ai donc ajouté le code ci-dessous pour essayer de le réparer, mais j'ai des problèmes. Merci d'avance! 

    override func viewDidLoad()
    {
        super.viewDidLoad()
        self.locationManager.delegate = self
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
        if CLLocationManager.locationServicesEnabled()
        {

            let status: CLAuthorizationStatus = CLLocationManager.authorizationStatus()
            if status == CLAuthorizationStatus.NotDetermined
            {
                locationManager.requestAlwaysAuthorization()
            }
            } else {

                print("locationServices disenabled")
            }
            locationManager.startUpdatingLocation()
            self.locationManager.startUpdatingLocation()
            self.mapView.showsUserLocation = true
            mapView.delegate = self
            centerMapOnLocation(initialLocation)
            addBoundry()
    }
5
Steve

Vous devez appeler,

locationManager.requestAlwaysAuthorization() 

ainsi que

 locationManager.requestWhenInUseAuthorization()

utiliser l'emplacement en douceur au premier plan aussi !!!

et vous ne devriez pas avoir besoin de deux instances pour appeler startupdatinglocation. en garder un. vous devez utiliser l'instance ou la variable globale au lieu de local pour obtenir l'emplacement dans toute l'étendue.

Mettre à jour :

Vous devez définir deux clés dans info.plist comme NSLocationAlwaysUsageDescription et NSLocationWhenInUseUsageDescription avec sa description d'utilisation.

10
Lion

J'avais le même problème, même avec NSLocationAlwaysUsageDescription et NSLocationWhenInUseUsageDescriptionset dans info.plist. Mon débogueur m'a dit de définir également NSLocationAlwaysAndWhenInUseUsageDescription... alors je l'ai fait. Ça a marché!

4
Chris Ashton

Si vous souhaitez recevoir la notification "WhenInUse", vous devez uniquement ajouter "Confidentialité - Emplacement lors de l'utilisation Description d'utilisation" dans votre info.plist, mais si vous souhaitez que "Toujours" accède à votre info.plist devrait ressembler à cette capture d'écran info.plist

 Image

Vous n'avez pas à ajouter d'autorisation de demande telle que requestAlwaysAuthorization ou requestWhenInUseAuthorization.

1
Blue1905