У меня возникла проблема, когда я попытался поэкспериментировать для приложения LBS. При тестировании в симуляторе это работает. Затем я попробовал его в iPhone. Это не сработало, как ожидалось.CLLocationManager не обновил данные правильно
Когда я запустил приложение, он отобразил всю информацию, такую как широта, долгота, расстояние и т. Д. Однако эта информация не изменилась, когда я ушел. Либо запустите приложение, либо мой iPhone автоматически заткнись (затем снова откройте приложение), эти данные все еще не изменились.
Когда я выключаю приложение и перезапускаю его, он может отображать информацию об обновлении.
Вот мой код
Я настроил CLLocationManager в viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
//setup locationManager
locationManager =[[CLLocationManager alloc]init];
locationManager.desiredAccuracy=kCLLocationAccuracyBest;
locationManager.distanceFilter=kCLDistanceFilterNone;
[locationManager setDelegate:self];
[locationManager startUpdatingLocation];
}
Вот код CLLocationManager делегатом
- (Недействительными) locationManager: (CLLocationManager *) менеджер didUpdateToLocation: (CLLocation *) newLocation fromLocation: (CLLocation *) oldLocation {
if (newLocation.horizontalAccuracy < 0) return;
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
if (locationAge > 5.0) return;
if (myLocation == nil || myLocation.horizontalAccuracy > newLocation.horizontalAccuracy) {
self.myLocation = newLocation;
// NSLog(@"mylocation=%@",self.myLocation);
[self.mainTableView reloadData];
[self sortedDistArray];//this method is to calculate distance and put it in array. It work...
if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {
[self stopLocationManager];
}
}
}
- (пустоты) stopLocationManager { [locationManager stopUpdatingLocation]; locationManager.delegate = nil; }
Теперь у меня есть следующие вопросы.
Что случилось с моей настройкой CLLocationManager? Должен ли я помещать ниже в appDelegate (в методе didFinishLaunchingWithOptions), пусть он запускает его фон? Сможет ли это быстро разрядить аккумулятор? Или установить его в ViewWillAppear вместо ViewDidLoad?
С другой стороны, я помещаю 'pull down to refresh' в программу. Я думал, что обновленные данные могут быть обновлены во время обновления. Однако это не сработает. Вот мой код обновления (я поставил EGOTableViewPullRefresh для функции обновления).
(аннулируются) reloadTableViewDataSource {
// should be calling your tableviews data source model to reload // put here just for demo _reloading = YES; locationManager =[[CLLocationManager alloc]init]; locationManager.desiredAccuracy=kCLLocationAccuracyBest; locationManager.distanceFilter=kCLDistanceFilterNone; [locationManager setDelegate:self]; [locationManager startUpdatingLocation]; [self sortedDistArray]; [mainTableView reloadData]; [self doneLoadingTableViewData];
}
Что моя мысль CLLocationManager сброса и запуска обновления местоположения во пользователей обновить его. Однако это не сработало. В чем моя ошибка?
Извините, у меня так много вопросов. Буду признателен, если кто-нибудь даст мне совет.
Проверка документации сог Я думаю, что есть задержка по времени между двумя последовательными вызовами для местоположения. –