我试图设置一个新的CLLocation和CLRegion,但位置总是返回相同的坐标,无论我实际上在哪里。我的主UIViewController符合CLLocationManagerDelegate协议,就像一个自定义类一样。当自定义类初始化时,我将计时器设置为在0.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);
代码似乎可以工作,除了坐标总是相同的值。我不知道如何改变这一点。任何帮助都很感激,谢谢!
位置管理器是一个异步框架。你不能调用startUpdatingLocation,然后立即期望位置管理器拥有用户的正确位置。
你必须将自己设置为位置管理器的委托,调用startUpdatingLocation,然后等待它调用你的locationManager:didUpdateToLocation:fromLocation:
方法。实际上,您需要检查您获得的位置更新,并拒绝旧的、过时的位置信息或太不准确的位置更新(当您第一次打开位置更新时,您获得的第一个更新来自上次GPS激活时,有时是几小时或几天后的更新。接下来的更新是相当不准确的,直到GPS稳定下来并开始提供良好的读数。
为了使其工作,您需要实现委托:
locationManager:didUpdateLocations:
参见此处
正确用法:
如何在iOS中使用CLLocationManager获取当前位置
我想是因为你没有更新location by location manager delegate方法。
使用此方法获取更新位置
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
location_updated = [locations lastObject];
NSLog(@"updated coordinate are %@",location_updated);
}
也在设备中测试。