Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

didChangeAuthorizationStatus not called after clicking Allow

This is my code for implementing google map and CLLocationManager:

class MapViewController: UIViewController {
    @IBOutlet weak var MapView: GMSMapView!
    var locationmanager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()
        locationmanager.delegate = self
        locationmanager.requestWhenInUseAuthorization()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
extension MapViewController: CLLocationManagerDelegate {
    private func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
     print("didChangeAuthorizationStatus")
     if status == .authorizedWhenInUse {
            locationmanager.startUpdatingLocation()
            MapView.isMyLocationEnabled = true
            MapView.settings.myLocationButton = true
        }
    }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        print("didUpdateLocations")
        if let location = locations.first {
            MapView.camera = GMSCameraPosition(target: location.coordinate, zoom: 15, bearing: 0, viewingAngle: 0)
            locationmanager.stopUpdatingLocation()
        }
    }
}

after clicking on Allow or Not Allow didChangeAuthorizationStatus never called

like image 565
Amir_P Avatar asked Dec 03 '16 19:12

Amir_P


1 Answers

If you are on Swift 3 the whole signature of this method is not correct.

This is what you need:

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 
    //your code 
}
like image 137
Elena Avatar answered Sep 30 '22 12:09

Elena