用户不允许使用位置服务时处理didFailToLocateUserWithError

时间:2017-09-11 12:29:08

标签: swift mapkit

我想用代码按下按钮后在地图上显示用户位置:

mapView.showsUserLocation = true

但是如果用户不允许使用位置服务并按下按钮,应用程序应该提示他修复它。我想实现didFailToLocateUserWithError mapView委托方法,但我不知道如何处理错误。该方法被调用两次,错误是:

  

错误域= MKLocationErrorDomain代码= 0“位置服务关闭”UserInfo = {NSLocalizedDescription =位置服务关闭,NSLocalizedRecoverySuggestion =打开设置中的位置服务>隐私允许(null)确定您当前的位置}

  

错误域= kCLErrorDomain代码= 1“(null)”

1 个答案:

答案 0 :(得分:0)

您应该检查授权状态是否已获得授权,并且只有在状态被授权时才执行需要使用位置的任何功能。否则,请求授权或向用户显示警报以启用它们。这样您就不需要处理错误,因为如果您实际上有权这样做,则只调用函数。

let locationManager = CLLocationManager()
if CLLocationManager.authorizationStatus() == .notDetermined {
    locationManager.requestWhenInUseAuthorization()
} else if CLLocationManager.authorizationStatus() == .authorizedWhenInUse {
    mapView.showsUserLocation = true
} else {
    //show alert
}

请记住,如果未确定授权状态,系统仅显示内置授权对话框。如果用户拒绝授权,则内置对话框将永远不会再次显示,因此在这种情况下,您需要提供自定义UIAlertController,告知用户如果要使用位置,则可以在“设置”中启用授权 - 您应用的相关功能。