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