CLLocationManager始终返回完全相同的位置

时间:2014-05-29 10:32:06

标签: ios objective-c cllocationmanager cllocation clregion

我正在尝试设置一个新的CLLocation和CLRegion,但无论我到底在哪里,该位置始终返回相同的坐标。我的主要UIViewController符合CLLocationManagerDelegate协议,自定义类也是如此。当自定义类初始化时,我有一个定时器设置为.25秒后触发,使用以下代码:

mainLocationManager = [[CLLocationManager alloc] init];
[mainLocationManager startUpdatingLocation];
location = [mainLocationManager location];
if (![location.timestamp isEqualToDate:[NSDate dateWithTimeIntervalSinceNow:0]]) { //filters cached data by updating location if cached data not recent enough
    location = [mainLocationManager location];
}

//Set up region
region = [[CLRegion alloc] initCircularRegionWithCenter:location.coordinate
                                                     radius:500
                                                 identifier:[NSString stringWithFormat:@"region:%@", locationName]];
NSLog(@"%@       %@", location, region);

除了坐标始终是相同的值之外,代码似乎有效。我不知道如何改变这一点。感谢任何帮助,谢谢!

3 个答案:

答案 0 :(得分:1)

为了实现这一点,您需要实现委托:

locationManager:didUpdateLocations:

另见here

正确使用:

How to get current location using CLLocationManager in iOS

答案 1 :(得分:1)

位置管理器是一个异步框架。你不能'调用startUpdatingLocation,然后立即期望位置管理器拥有用户的正确位置。

您必须将自己设置为位置maanger的委托,调用startUpdatingLocation,然后等待它调用您的locationManager:didUpdateToLocation:fromLocation:方法。实际上,您需要检查所获得的位置更新,并拒绝旧的,过时的位置信息或过于不准确的位置更新(当您第一次打开位置更新时,您获得的第一次更新是从上次GPS激活时开始,并且有时几小时或几天过时。然后下一次更新是非常不准确的,直到GPS稳定下来并开始提供良好的读数。)

答案 2 :(得分:0)

我认为因为您没有按位置管理器委托方法更新位置。

通过此方法获取更新位置

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

{
location_updated = [locations lastObject];    
NSLog(@"updated coordinate are %@",location_updated);

}

还要在设备中测试它。