我们收到了一份报告,报告中一些用户被困在应用程序的某些屏幕中,无法进入应用程序的仪表板。
在检查有问题的屏幕后,这是一个“正在加载”屏幕,在用户成功登录后将显示该屏幕。唯一可能导致用户卡在此处的代码是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!
答案 0 :(得分:0)
如果您使用startUpdatingLocation()
,通常需要大约一秒钟的时间来进行第一次更新。第一次更新通常是一个旧的(缓存的)位置,但是它将很快到达。
使用requestLocation()
可能需要花费几秒钟的时间,因为它将等待直到拥有一个合适的位置。
此方法立即返回。调用它会导致位置管理器获取位置修复程序(,可能需要几秒钟),然后调用代理的locationManager(_:didUpdateLocations :)方法并生成结果。位置定位是按desiresAccuracy属性指示的精度级别获得的。仅将一个位置修复报告给代表,然后停止位置服务。
您的问题是您没有在位置管理器上致电requestWhenInUseAuthorization()
。您必须征求使用位置的许可。调用该函数(将键添加到应用程序的Info.plist)还需要做其他一些事情。