ios CLLocationManager第二次不会获取位置

时间:2012-07-12 08:01:37

标签: objective-c ios core-location

我有一个getLocation方法初始化我的CLLocationManager并调用startUpdatingLocation。收到用户的位置后,我拨打stopUpdatingLocation

稍后,当用户按下刷新时,我调用reloadData调用getLocation的方法,以便我可以获取用户的最新位置。但是,这永远不会调用locationManager:didUpdateToLocation:fromLocation 方法..所以我永远不会得到用户的最新位置。可能是什么问题?

-(void) getLocation {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
}

- (void) locationManager: (CLLocationManager *)manager 
 didUpdateToLocation: (CLLocation *)newLocation
        fromLocation:(CLLocation *)oldLocation
{
    if (oldLocation!= nil) { // make sure to wait until second latlong value
        [self setLatitude:newLocation.coordinate.latitude];
        [self setLongitude: newLocation.coordinate.longitude];
        [self.locationManager stopUpdatingLocation];
        self.locationManager.delegate = nil;
        self.locationManager = nil;
        [self makeUseOfLocationWithLat:[self getLatitude] andLon:[self getLongitude]];
    }
}

-(void) reloadData {
    [self getLocation];
}

3 个答案:

答案 0 :(得分:1)

是否真的有必要分配新的CLLocationManager?尝试只分配一次(例如在你的init中),然后根据需要调用startUpdatingLocation和stopUpdatingLocation。 对我来说,这个解决方案很有效。

答案 1 :(得分:1)

你在测试期间移动了吗?因为我认为回调只会在以下情况下被触发:

  • 您致电startUpdatingLocation
  • 您的位置发生了变化
  • 位置管理员获得更好的结果(更详细)

所以我认为对于你的用例:因为你不动,回调locationManager:didUpdateToLocation:fromLocation:只会在你点击刷新后被调用一次,因为没有旧的位置,你不会进入if案例。

另一件事:您的班级中肯定只有一个CLLocationManager。我每个项目/应用程序只使用一个(包装在一个单例中)。这是首选的方法!此外,我认为这将保留oldLocation值,以便通过更改此问题来解决您的问题。

最佳, 基督教

答案 2 :(得分:0)

你可以尝试这个,这将有助于你在每次打开页面时更新。因为如果你把startUpdatingLocation放在viewdidload中,它只会第一次加载

-(void)viewWillAppear:(BOOL)animated
{
    [locationManager startUpdatingLocation];
}