CLLocationManager.requestLocation调用其委托需要多长时间

时间:2019-05-09 06:45:50

标签: swift cllocationmanager

我们收到了一份报告,报告中一些用户被困在应用程序的某些屏幕中,无法进入应用程序的仪表板。

在检查有问题的屏幕后,这是一个“正在加载”屏幕,在用户成功登录后将显示该屏幕。唯一可能导致用户卡在此处的代码是CLLocationManager。屏幕将等待CLLocationManager调用didUpdateLocations或didFailWithError,然后转到应用程序的仪表板。

我的猜测是CLLocationManage没有调用任何委托。因此,用户被卡在“加载”屏幕中。

CLLocationManager.requestLocation会调用其委托函数多长时间?如果请求时间太长,CCLocationManager会调用didFailWithError吗?

下面是我们代码的简化版本:

override func viewDidLoad() {
    super.viewDidLoad()
    locationManager = CLLocationManager()
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyBest
    locationManager.requestLocation()
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    // process the location then forward to dashboard screen
}

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
    // forward to dashboard screen
}

非常感谢您提供任何信息! TIA!

1 个答案:

答案 0 :(得分:0)

如果您使用startUpdatingLocation(),通常需要大约一秒钟的时间来进行第一次更新。第一次更新通常是一个旧的(缓存的)位置,但是它将很快到达。

使用requestLocation()可能需要花费几秒钟的时间,因为它将等待直到拥有一个合适的位置。

  

此方法立即返回。调用它会导致位置管理器获取位置修复程序(,可能需要几秒钟),然后调用代理的locationManager(_:didUpdateLocations :)方法并生成结果。位置定位是按desiresAccuracy属性指示的精度级别获得的。仅将一个位置修复报告给代表,然后停止位置服务。

您的问题是您没有在位置管理器上致电requestWhenInUseAuthorization()。您必须征求使用位置的许可。调用该函数(将键添加到应用程序的Info.plist)还需要做其他一些事情。