当我尝试尝试 LBS 应用程序时,我遇到了问题。在模拟器中测试时,它似乎工作。然后,我在 iPhone 上试了一下。它没有按预期工作。
当我启动应用程序时,它显示了我的位置纬度、经度、距离等所有信息。但是,当我离开时,这些信息并没有改变。运行应用程序或我的 iPhone 自动关闭(然后再次打开应用程序),这些数据仍然保持不变。
当我关闭应用程序并重新启动它时,它可以显示更新信息。
这是我的代码
我在 viewDidLoad 中设置了 CLLocationManager
- (void)viewDidLoad
{
[super viewDidLoad];
//setup locationManager
locationManager =[[CLLocationManager alloc]init];
locationManager.desiredAccuracy=kCLLocationAccuracyBest;
locationManager.distanceFilter=kCLDistanceFilterNone;
[locationManager setDelegate:self];
[locationManager startUpdatingLocation];
}
这是 CLLocationManager 代表的代码
-(void)locationManager:(CLLocationManager *)manager 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];
}
}
}
- (void)stopLocationManager{ [locationManager stopUpdatingLocation]; locationManager.delegate = nil; }
现在,我有以下问题。
我的 CLLocationManager 设置有什么问题?我应该在 appDelegate 下面(在 didFinishLaunchingWithOptions 方法下)让它在后台运行吗?它会很快耗尽电池电量吗?还是在 ViewWillAppear 而不是 ViewDidLoad 中设置?
另一方面,我将“下拉刷新”放入程序中。我认为可以在刷新期间更新更新的数据。但是,它也不会起作用。这是我的刷新代码(我将 EGOTableViewPullRefresh 用于刷新功能)。
(void)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 在用户刷新期间重置并开始更新位置。但是,它没有用。我的错是什么?
对不起,我有很多问题。如果有人给我建议,我将不胜感激。