Mon application semble fonctionner correctement sur chaque utilisation sauf le premier. Je demande l'autorisation de l'utilisateur et j'ai les clés appropriées dans le plist mais le reste de viewDidLoad après les lignes demandant l'autorisation ne s'exécute pas. J'ai joint les points de rupture ci-dessous et le point de rupture 2 n'est pas atteint la première fois que l'application est utilisée.Après requestAuthorization sur le premier chargement le reste de viewDidLoad n'est pas exécuté et la ligne suivante saute aux fonctions de délégué (swift 3)
Je suis assez sûr qu'une fois l'autorisation donnée, il suffit de passer à la fonction func locationManager dans l'extension.
Je pourrais attendre jusqu'à la fin pour demander l'autorisation jusqu'à ce que tout le reste soit réglé mais je ne sais pas si c'est le meilleur, ou le seul moyen, de sortir.
Merci,
class MapController: UIViewController, GMSMapViewDelegate {
var locationManager = CLLocationManager()
var currentLocation: CLLocation?
@IBOutlet var mapView: GMSMapView!
override func viewDidLoad(){
super.viewDidLoad()
locationManager = CLLocationManager()
--------------------------> breakpoint 1
locationManager.requestAlwaysAuthorization()
locationManager.requestWhenInUseAuthorization()
-------------------------> breakpoint 2
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = 50
locationManager.startUpdatingLocation()
locationManager.delegate = self
guard let lat = locationManager.location?.coordinate.latitude else {return}
guard let lng = locationManager.location?.coordinate.longitude else {return}
mapView.settings.compassButton = true
mapView.settings.myLocationButton = true
mapView.isMyLocationEnabled = true
let camera = GMSCameraPosition.camera(withLatitude: lat, longitude: lng, zoom: 1)
mapView.camera = camera
mapView.delegate = self
getData()
}
extension MapController: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let location: CLLocation = locations.last else {return}
let camera = GMSCameraPosition.camera(withLatitude: location.coordinate.latitude, longitude: location.coordinate.longitude, zoom: 1)
mapView.animate(to: camera)
}
}
Vous voudrez peut-être voir les commentaires sur la réponse ... – Honey