我正在使用
startMonitoringSignificantLocationChanges
获取(lat,lon)值。我的问题是
遇到
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
[locationMangerObject startMonitoringSignificantLocationChanges];
后,不会立即调用方法。仅在didUpdateToLocation
方法内部,我保留两个全局双变量来保存纬度和经度,这些变量将根据从{{1}获得的坐标设置这些值被传递给webservice,因为didUpdateToLocation只被调用一定的延迟,在这些延迟之间,(lat,lon)的参数将零作为它们的值并传递给服务,从而导致意外的响应。
如何制作
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
在`[locationMangerObject startMonitoringSignificantLocationChanges]之后立即调用的方法;遇到了。
请有人建议我解决此问题的解决方案。
提前致谢。
答案 0 :(得分:5)
也许您应该考虑使用 startUpdatingLocation 方法而不是 startMonitoringSignificantLocationChanges 。来自iOS文档:
此方法立即返回。调用此方法会导致位置管理器获取初始位置修复(可能需要几秒钟),并通过调用其locationManager:didUpdateToLocation:fromLocation:method来通知您的委托。
答案 1 :(得分:1)
根据您是否有小区连接或无线连接,以及GPS卫星是否有良好的信号,可能需要几秒到几分钟才能获得一个好的位置。但是,您应该立即获得缓存(可能过时)的位置。
您是否为locationMangerObject设置了委托?
在调用startMonitoringSignificantLocationChanges后,您的函数是否返回到runloop?
答案 2 :(得分:0)
///Hmmmmm
...CLLocationManager does n't call delegate method properly
...after lot of R&D I'm using a watchdog method it calls " -(void)locationadd " function every 10seconds and i'm using that location for drawing the path.
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
}
- (void)viewDidLoad
{
[NSTimer scheduledTimerWithTimeInterval:10
target:self
selector:@selector(locationadd)
userInfo:nil
repeats:YES];
}
-(void)locationadd
{
if ([locationManager location]) {
//i'm saving this location
CLLocation *locat=locationManager.location;
}
}
//
答案 3 :(得分:0)
这是因为方法startMonitoringSignificantLocationChanges()
监视位置的重大变化。因此,当位置或过去位置更新的时间戳存在度量差异时,它不会一直调用位置更新。
最好使用startUpdatingLocation()
,它会被频繁调用,因此您会在didUpdateLocations()
内部获得位置更改。