错误:
尝试在不提示位置的情况下启动MapKit位置更新 授权。必须调用 - [CLLocationManager requestWhenInUseAuthorization]或 - [CLLocationManager requestAlwaysAuthorization] first。
代码:
class ViewController: UIViewController {
@IBOutlet weak var mapView: MKMapView!
var locationManager: CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
let currentLocationCoo = locationManager.location?.coordinate
if let locationCoo = currentLocationCoo{
mapView.region = MKCoordinateRegionMake(CLLocationCoordinate2D(latitude: locationCoo.latitude, longitude: locationCoo.longitude), MKCoordinateSpan(latitudeDelta: 0.002, longitudeDelta: 0.002))
print("location ni nil")
}else{
mapView.region = MKCoordinateRegionMake(CLLocationCoordinate2D(latitude: 52.05695, longitude: 14.50575), MKCoordinateSpan(latitudeDelta: 0.002, longitudeDelta: 0.002))
}
let defaultAnnotation = MKPointAnnotation()
defaultAnnotation.coordinate = mapView.region.center
defaultAnnotation.title="Center"
defaultAnnotation.subtitle="This is!"
mapView.addAnnotation(defaultAnnotation)
mapView.showsUserLocation=true
mapView.showsBuildings=true
mapView.userTrackingMode = .None
}
我注意到iOS仅在首次启动时抛出错误。在我甚至同意定位服务提示之前。在随后的发布它工作正常。是因为应用程序启动的第一个视图控制器已经使用了地图吗?解决方法可能不是直接跳转到地图,而是先显示其他VC。还有其他解决方法吗?
答案 0 :(得分:1)
是的,您是正确的,mapView.showsUserLocation=true
需要访问您当前的位置,如果不同意操作系统显示的警报,则无法访问。您可以实施didChangeAuthorizationStatus
的{{1}}方法,并在其中包含与地图相关的代码。试试以下代码。
CLLocationManagerDelegate