2016-12-03 14 views
5

To jest mój kod do wdrożenia Google Map i CLLocationManager:didChangeAuthorizationStatus nie nazywa się po kliknięciu Pozwól

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() 
     } 
    } 
} 

po kliknięciu Zezwól lub nie zezwolić na didChangeAuthorizationStatus nigdy nazwie

+1

Nie bardzo zorientowani w Swift (jestem bardziej z Objective-C facet), ale nie jest to 'private' kwalifikator nierozważne tutaj? – jcaron

+0

@jcaron Absolutnie. Prywatne metody nie są narażone na Objective-C, a więc nie na Core Location. Jest to opcjonalna metoda, więc kompilator nie będzie narzekał (chociaż powinno to być IMO). –

+0

@Amir_P Zrobione. Thanks =) – Elena

Odpowiedz

7

jeśli jesteś na Swift 3 cały podpisu tej metody nie jest poprawna.

To jest to, czego potrzebujesz:

func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 
    //your code 
} 
+1

te rzeczy powinny być wykryte przez kompilator, jeśli jest zadeklarowany wewnątrz rozszerzenia – jarryd

+0

@Jarryd niestety nie jest doskonały kompilator Xcode. Rzeczy mogły się zmienić od czasu opublikowania tego pytania (pół roku temu). – Elena

+0

Wczoraj wprowadziłem menedżera lokalizacji, a kompilator narzekał na zaznaczenie funkcji prywatnej w rozszerzeniu. Funkcja może zostać wywołana tylko raz z jakiegoś powodu. W każdym razie to naprawiło, dzięki! – jarryd

Powiązane problemy