如何在加载所有 viewDidLoad 内容之前获取 CLLocationManager 结果?
How to get CLLocationManager result before all viewDidLoad stuff loads?
请检查代码:
let manager = CLLocationManager()
//Location manager to determine the current location
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations[0]
lat = location.coordinate.latitude
lon = location.coordinate.longitude
let currentLocation = CLLocation(latitude: lat!, longitude: lon!)
}
我在 viewDidLoad() 中还有更多功能:
override func viewDidLoad() {
super.viewDidLoad()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
//Here i want to get the result immediately, but...
manager.startUpdatingLocation()
parseJSONfunction()
anotherFunction()
anotherFunction2()
...}
因此,在加载所有 viewDidLoad()
内容之前,我无法获得 manager.startUpdatingLocation()
函数的结果。
问题:是否可以在所有其他函数运行之前获取坐标?如果是,请描述如何?
问题:是否可以在所有其他函数运行之前获取坐标?
一句话,没有。位置管理器是异步的。您要求它开始更新您的位置,它会启动 GPS 并尝试进行修复(它还使用手机信号塔、WiFi 基站等)。可能需要几秒钟(或更长时间)才能获得相当准确的位置正在阅读。
当我编写位置感知应用程序时,我通常会启动位置管理器,并在我的 locationManager(_:didUpdateLocations:)
方法中检查结果的水平精度,并且仅在它至少相当准确时才采用它。这可能需要更长的时间。
如果你加载 viewController 它是同步的。系统进行设置,这会导致各种框架调用触发,然后 viewDidLoad 被调用,一旦视图加载,同步。如果您在用户要求显示新视图控制器时启动位置管理器,则您不可能在调用 viewDidLoad 时修复位置。
如果你加载你的应用程序,让应用程序委托调用一个单例来开始位置更新,然后等待用户切换到你的另一个屏幕,然后你在 viewDidLoad 期间向单例询问位置你有一个获得良好位置读数的好机会,但即便如此也不确定。
请检查代码:
let manager = CLLocationManager()
//Location manager to determine the current location
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations[0]
lat = location.coordinate.latitude
lon = location.coordinate.longitude
let currentLocation = CLLocation(latitude: lat!, longitude: lon!)
}
我在 viewDidLoad() 中还有更多功能:
override func viewDidLoad() {
super.viewDidLoad()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
//Here i want to get the result immediately, but...
manager.startUpdatingLocation()
parseJSONfunction()
anotherFunction()
anotherFunction2()
...}
因此,在加载所有 viewDidLoad()
内容之前,我无法获得 manager.startUpdatingLocation()
函数的结果。
问题:是否可以在所有其他函数运行之前获取坐标?如果是,请描述如何?
问题:是否可以在所有其他函数运行之前获取坐标?
一句话,没有。位置管理器是异步的。您要求它开始更新您的位置,它会启动 GPS 并尝试进行修复(它还使用手机信号塔、WiFi 基站等)。可能需要几秒钟(或更长时间)才能获得相当准确的位置正在阅读。
当我编写位置感知应用程序时,我通常会启动位置管理器,并在我的 locationManager(_:didUpdateLocations:)
方法中检查结果的水平精度,并且仅在它至少相当准确时才采用它。这可能需要更长的时间。
如果你加载 viewController 它是同步的。系统进行设置,这会导致各种框架调用触发,然后 viewDidLoad 被调用,一旦视图加载,同步。如果您在用户要求显示新视图控制器时启动位置管理器,则您不可能在调用 viewDidLoad 时修复位置。
如果你加载你的应用程序,让应用程序委托调用一个单例来开始位置更新,然后等待用户切换到你的另一个屏幕,然后你在 viewDidLoad 期间向单例询问位置你有一个获得良好位置读数的好机会,但即便如此也不确定。