iOS 8和Swift中的MapKit

我正在尝试在iOS 8上使用MapKit并且我不断收到错误
Trying to start MapKit location updates without prompting for location authorization. Must call   
-[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager 
requestAlwaysAuthorization] first.

在这里查找,我发现我必须在我的plist中实现NSLocationWhenInUsageDescription,并且还调用了locationManager.requestWhenInUseAuthorization()但没有任何反应,我仍然在控制台中得到该错误.我究竟做错了什么?

解决方法

在我的应用程序委托中,我为类外的locationManager创建了一个可选的var,然后进行设置
locManager = CLLocationManager()
locManager!.requestWhenInUseAuthorization()

这会导致警报视图弹出NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription,如果您适当地更改它.

然后在视图控制器文件中,我在类外部创建了另一个var来保存本地CLLocationManager.我接着说

if locManager {
        locMan = locManager!
        locMan!.delegate = self
    }

然后您可以使用委托方法

func locationManager(_manager: CLLocationManager!,didChangeAuthorizationStatus status: CLAuthorizationStatus)

当授权状态改变时调用它,当用户响应弹出窗口时它会调用.在此内部,您可以使用这段代码用户位置放在地图上

if status == CLAuthorizationStatus.AuthorizedWhenInUse {
        map.showsUserLocation = true
    }

仅当您在使用时获得授权时,才会将用户位置添加到地图中.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...