2017-08-19 1 views
1

J'ai donc écrit ce code il y a quelques mois (quand iOS 10.1 était toujours la dernière version), et ça a bien fonctionné. Cependant, lorsque j'ai essayé récemment avec iOS 10.2, le CLLocationManager ne semble pas appeler la fonction didUpdateLocation. Lorsque je suis revenu sur iOS 10.1, le simulateur a de nouveau fonctionné. Quand j'ai essayé de rechercher mon problème, tout ce que j'ai eu, c'était des solutions pour la mise à jour d'iOS 8, où vous deviez aussi mettre à jour votre info.plist. Par conséquent, je me demandais s'il y a quelque chose de plus que je dois faire avec CoreLocation pour iOS 10.2. J'ai les propriétés d'information Privacy - Location When In Use Usage Description et Privacy - Location Always Usage Description dans le info.plist.CLLocationManager n'appelant pas didUpdateLocation() dans iOS 10.2 [Swift]

let locationManager = CLLocationManager() 
var userLocation:CLLocation = CLLocation() 

func handleSwitchChanged() { 
    if onlineSwitch.isOn { 
     if CLLocationManager.authorizationStatus() != .authorizedAlways { 
      locationManager.requestWhenInUseAuthorization() 
      onlineSwitch.isOn = false 
      return 
     } 
     (mainScreen as! MainScreenController).currUser.isOnline = 1 
     determineUserLocation() 
    } else { 
     (mainScreen as! MainScreenController).currUser.isOnline = 0 
     removeFromFirebase() 
    } 
} 

func determineUserLocation() { 
    locationManager.delegate = self 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest 
    locationManager.requestAlwaysAuthorization() 

    if CLLocationManager.locationServicesEnabled() { 
     locationManager.startUpdatingLocation() 
    } 
} 

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    userLocation = locations[0] as CLLocation 
} 
+0

Où définissez-vous 'delegate'? Je veux dire ... appeler 'handleSwitchChanged()' qui appelle 'determUserLocation()'? De même, '! = .authorizedAlways' ne devrait-il pas être'! = .authorizedWhenInUse'? –

+0

@ AlejandroIván Je place le délégué dans 'determUserLocation()', qui est appelé chaque fois que l'on appuie sur un bouton. Je pense que c'est ".authorizedAlways". J'ai essayé '.authorizedWhenInUse' et cela n'a pas fonctionné. – kbunarjo

+0

Oui, mais vous demandez une autorisation d'utilisation. Cela veut dire que ce ne sera jamais toujours et, par conséquent, cela arrivera toujours dans ce «si», puis reviendra. Essayez de supprimer ce retour afin que votre fonction appelle réellement à déterminer. UserUserLocation() –

Répondre

0

Je pense que cela pourrait être une erreur avec iOS 10.2. Quand j'essaie le même code sur 10.1 et 10.3, ça marche bien.