위치 관리자 메서드 requestWhenInUseAuthorization() 또는 startUpdatingLocation()이 호출되지 않은 경우에도 위치 관리자 (_ : 변경 승인 :)가 앱이 처음 실행될 때마다 호출됩니까?locationManager (_ : 변경 승인 :)이 앱이 처음 실행될 때 실행됩니까?
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)")
}
}
나는 위치를 찾는거야 :
@IBAction func findOutPressed(_ sender: UIButton) {
getLocation()
}
내 CoreLocation 코드는 아래의 확장에 : 나는 아래 @IBAction에 전화 버튼 클릭 위치를보고하기 위해 노력하고있어 @IBAction findOutPressed가 클릭으로 트리거되지 않았고 사용자가 버튼을 클릭하기 전에 결과가 처음 비어있는 resultsLabel에서 업데이트되는 경우에도 관리자 (변경 승인을 마친 사용자)가 즉시 실행됩니다. . 단추를 클릭했는지 여부를 결정하기 위해 플래그를 설정하여 레이블이 미리 성숙하게 업데이트되는 것을 방지 할 수 있지만 위치 관리자 (_ : 변경 권한 부여가 수행됨)가 트리거되는 시점을 파악하려고합니다. Apple이 말하길 : "위치 서비스를 사용하는 응용 프로그램의 기능이 변경 될 때마다이 메서드가 호출됩니다. 사용자가 응용 프로그램이나 시스템 전체에 대해 위치 서비스를 사용하도록 허용하거나 거부했기 때문에 변경이 발생할 수 있습니다." 앱이 처음 실행될 때 트리거되는 경우에는 해당되지 않는 것 같습니다. 나는 승인 변경으로 어떤 일이 벌어지고 있는지를 이해할 수있는 사람이라면 누구에게나 감사한다. 내가 뭔가를 놓친 경우 사과드립니다. 감사합니다. 그래서 당신은 아마 AppDelegate에 상단에서을 locationManager를 초기화 &을 설정하는
var locationManager = CLLocationManager()
// ...
locationManager?.delegate = self
// ...
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
print("authorization checked...")
}
:
감사합니다! 이것은 효과적이었습니다! 또 다른 이상한 점도 눈치 채고 있습니다. 시뮬레이터에서 위치를 변경하면 : 맞춤 위치에서 Apple으로 이동하면 Apple 위치가 이후 클릭으로 표시되지 않습니다. 시뮬레이터를 종료하고 앱을 다시 실행하면 변경 사항이 적용됩니다.하지만 내 맞춤 위치로 다시 전환하면 변경 사항을보기 전에 동일한 앱을 종료하고 다시 실행해야합니다. 이 표준 행동인가 아니면 이상한 일입니까? – Gallaugher