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 メソッドの下) を配置して、バックグラウンドで実行する必要がありますか? 電池の消耗が早いですか?または、ViewDidLoad の代わりに ViewWillAppear に設定しますか?
一方、「プルダウンしてリフレッシュ」をプログラムに入れました。更新されたデータは更新中に更新できると思いました。ただし、うまくいきません。これが私のリフレッシュコードです(リフレッシュ機能に 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 がリセットされ、ユーザーが更新中に場所の更新を開始することです。しかし、うまくいきませんでした。私のせいは何ですか?
すみません、質問がたくさんあります。誰かが私にアドバイスをくれれば幸いです。