2017-08-17 4 views
0

Lorsque j'exécute mon application iOS de Xcode vers le simulateur iOS ou vers mon périphérique physique, l'application se bloque en quelques secondes. Lorsque l'application entre en arrière-plan et que je suis retournée à l'écran d'accueil de l'iPhone, la vue Alert demandant l'autorisation d'utiliser ma position apparaît mais disparaît rapidement avant de pouvoir sélectionner une réponse.L'application iOS se bloque sur l'écran de lancement, l'emplacement est demandé après le blocage de l'application (Xcode 8.3.3)

Après la déclaration et l'initialisation d'un CLLocationManager appelé « LocationManager », je crois que les erreurs sont déclenchées à partir de ces déclarations:

locationManager.requestWhenInUseAuthorization() 
    locationManager.requestLocation() 

La principale erreur qui apparaît dans les journaux de la console est:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Delegate must respond to locationManager:didFailWithError:' 

J'ai défini ma description d'utilisation avec la "NSLocationWhenInUseUsageDescription", afin que mon application puisse présenter à l'utilisateur l'emplacement de son emplacement, lui donnant ainsi la permission d'accéder à son emplacement. Y at-il autre chose qui me manque peut contribuer à cette erreur? Pour obtenir l'emplacement de l'utilisateur, en ai-je besoin en ajoutant la clé "NSLocationWhenInUseUsageDescription" au fichier Info.plist, ou y a-t-il d'autres mesures à prendre?

+0

Avec ce morceau de code je doute que quelqu'un peut vous aider à – GIJOW

+0

Les journaux de débogage? – kerry

+0

@kerry J'ai ajouté l'erreur principale du journal de débogage à l'article :) – tennis25

Répondre

0

Pour résoudre votre problème:

Créer une classe comme, et remplacer les méthodes ci-dessous:

class LocationDelegate : NSObject, CLLocationManagerDelegate { 
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
     // here you will receive your location updates on `locations` parameter 

    } 

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { 
     // if something goes wrong comes to here 
    } 

    func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 
     // here you can monitor the authorization status changes 
    } 

} 

Créer une instance globale de cette classe où vous voulez.

let locationDelegate: LocationDelegate = LocationDelegate() 

Alors avant de vous demander la permission définie le délégué:

locationManager.delegate = locationDelegate 
+0

Génial, merci beaucoup! – tennis25