Wird der Location Manager (_: hat Change Authorization:) immer dann aufgerufen, wenn eine App zum ersten Mal ausgeführt wird, auch wenn weder die Location Manager-Methode requestWhenInUseAuthorization() noch startUpdatingLocation() aufgerufen wurde? Ich versuche Lage an dem Klick auf eine Schaltfläche zu berichten, die ich in den @IBAction unten nennen:locationManager (_: Wurde Change Authorization:) ausgeführt, wenn die App zum ersten Mal ausgeführt wird?
@IBAction func findOutPressed(_ sender: UIButton) {
getLocation()
}
Mein Corelocation-Code ist in der Verlängerung unter:
extension ViewController: CLLocationManagerDelegate {
// Called from findOutPressed to get location when button is clicked
func getLocation() {
let status = CLLocationManager.authorizationStatus()
handleLocationAuthorizationStatus(status: status)
}
// Respond to the result of the location manager authorization status
func handleLocationAuthorizationStatus(status: CLAuthorizationStatus) {
switch status {
case .notDetermined:
locationManager.requestWhenInUseAuthorization()
case .authorizedWhenInUse, .authorizedAlways:
locationManager.startUpdatingLocation()
case .denied:
print("I'm sorry - I can't show location. User has not authorized it")
case .restricted:
print("Access denied - likely parental controls are restricting use in this app.")
}
}
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
handleLocationAuthorizationStatus(status: status)
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let currentLocation = locations.last
let labelText = "My location is: latitude = \((currentLocation?.coordinate.latitude)!), longitude = \((currentLocation?.coordinate.longitude)!)"
resultLabel.text = labelText
locationManager.stopUpdatingLocation()
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Dang, there was an error! Error: \(error)")
}
}
Ich finde Lage Manager (did Change Authorization:) wird sofort ausgeführt, auch wenn die @IBAction findOutPressed nicht mit einem Klick ausgelöst wurde, und die Ergebnisse werden in meinem ursprünglich leeren resultLabel aktualisiert, bevor der Benutzer auf die Schaltfläche geklickt hat . Ich weiß, dass ich eine Markierung setzen kann, um zu bestimmen, ob der Knopf angeklickt wurde oder nicht, die Etikette verhinderend, das Etikett zu aktualisieren, aber ich versuche zu verstehen, wenn Standortmanager (_: hat Änderung Berechtigung) ausgelöst wird. Apple sagt: "Diese Methode wird immer dann aufgerufen, wenn sich die Fähigkeit der Anwendung ändert, Standortdienste zu verwenden. Änderungen können auftreten, weil der Benutzer die Verwendung von Standortdiensten für Ihre Anwendung oder für das gesamte System zugelassen oder verweigert hat." Es scheint nicht, dass dies den Fall der Auslösung abdeckt, wenn eine App zum ersten Mal ausgeführt wird. Ich bin dankbar für jeden, der mich in meinem Verständnis darüber, was mit Autorisierungsänderungen passiert, klarstellen kann. Entschuldigung, wenn ich etwas Grundlegendes verpasst habe. Danke!
Dank erklären! Das hat funktioniert - sehr geschätzt! Ich bemerke auch noch eine andere seltsame Sache: Wenn ich den Standort im Simulator ändere: vom benutzerdefinierten Ort zu Apple, wird der Standort von Apple nicht mit nachfolgenden Klicks angezeigt. Wenn ich den Simulator verlasse und die App erneut starte, sehe ich, dass die Änderungen wirksam werden, aber wenn ich zu meinem benutzerdefinierten Ort zurückwechsle, muss ich dieselbe App beenden und erneut ausführen, bevor ich die Änderung sehe. Ist das Standardverhalten oder ist etwas anderes seltsam passiert? – Gallaugher