我有一个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];
}
答案 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];
}