CLLocation Prompt 显示并在一瞬间消失
CLLocation Prompt shows and disappears in one moment
在我的应用程序中,我尝试从 GPS 获取经度和纬度。为此,我必须询问用户是否允许访问他的位置。在我这样做之前,我向 Info.plist
添加了这两个规则:Privacy - Location When In Use Usage Description
和 Privacy - 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=]
在我的应用程序中,我尝试从 GPS 获取经度和纬度。为此,我必须询问用户是否允许访问他的位置。在我这样做之前,我向 Info.plist
添加了这两个规则:Privacy - Location When In Use Usage Description
和 Privacy - 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=]