gpt4 book ai didi

ios - CLLocation 管理器两次更新位置

转载 作者:行者123 更新时间:2023-11-28 18:58:20 25 4
gpt4 key购买 nike

我的代码中有一个奇怪的问题。我想调用 [locationManager startUpdatingLocation]; 并且当更新完成时 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *) oldLocation 使用 [locationManager stopUpdatingLocation] 立即停止更新。我已将此作为方法中的第一行。但是有时它会被调用两次。谁能给我一些指示,说明为什么会发生这种情况?如果我做的第一件事是在获得第一个更新时停止更新,这对我来说没有意义。一些代码:

-(void)getLocation{

[locationManager requestWhenInUseAuthorization];
[locationManager startUpdatingLocation];


}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
[locationManager stopUpdatingLocation]; //kill it NOW or we have duplicates
NSLog(@"didUpdateToLocation: %@", newLocation);

//do other stuff....

}

我知道它在重复,因为我偶尔会在屏幕上显示两次 NSLog。任何帮助将非常感激。谢谢!

最佳答案

通常首先使用缓存数据调用此委托(delegate)方法,然后使用更新的位置数据再次调用。

您可以在使用前查看位置数据的历史。例如:

- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
NSTimeInterval t = [[newLocation timestamp] timeIntervalSinceNow];
// If this location was made more than 3 minutes ago, ignore it.
if (t < -180) {
// This is cached data, you don't want it, keep looking
return;
}

[self foundLocation:newLocation];
}

此外,如果您从 CLLocation 管理器请求了高级别的准确性,则随着准确性的提高,didUpdateToLocation 委托(delegate)将被多次调用。如果您真的只想要第一个(可能不是这种情况),请设置一个 bool 值来跟踪您已经收到位置的事实,以便您可以忽略后续调用。

关于ios - CLLocation 管理器两次更新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29328776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com