我正在尝试设置一个新的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);
除了坐标始终是相同的值之外,代码似乎有效。我不知道如何改变这一点。感谢任何帮助,谢谢!
答案 0 :(得分:1)
答案 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);
}
还要在设备中测试它。