CLLocation Prompt 显示并在一瞬间消失

CLLocation Prompt shows and disappears in one moment

在我的应用程序中,我尝试从 GPS 获取经度和纬度。为此,我必须询问用户是否允许访问他的位置。在我这样做之前,我向 Info.plist 添加了这两个规则:Privacy - Location When In Use Usage DescriptionPrivacy - Location Always Usage Description,然后在 AppDelegate 中我询问是否允许这样做(SWIFT 3.0):

if CLLocationManager.locationServicesEnabled() == true {
        let localisationManager = CLLocationManager()
        localisationManager.requestWhenInUseAuthorization()
        localisationManager.startUpdatingLocation()
    }

我可以在 运行 应用程序时看到 UIAlertController 片刻,但几乎同时它消失了,我没有时间点击 Allow 而且我不能使用全球定位系统。如何解决?

Working solution of my problem:

我在 class LocationManager and then I used it in function.

中创建了单独的变量 var locationManager = CLLocationManager()

问题是 localisationManager object 在授权提示出现之前被释放... requestWhenInUseAuthorization 以延迟方式运行,所以这个实例的 CLLocationManager 从你身下被拉出来。

因此,将 localisationManager 的范围更改为您的视图控制器 class 而不是局部变量。

class ViewController: UIViewController {
 let localisationManager = CLLocationManager()    // <-- scope to class

 //...
 function requestAuthorization() {
   localisationManager.requestWhenInUseAuthorization() 
 }

}

您也可以将 CLLocationManager 的范围限定到您的应用委托。

这在 WWDC 2016 视频 核心位置最佳实践 session 的第 21 分钟附近得到了很好的解释。 =13=]