私はVCでCoreLocationマネージャを持っていますが、ユーザーが「方向を取得」ボタンを押すと、位置マネージャが初期化され、アプリは現在の場所とあらかじめ定義された目的地の場所でGoogleマップの方向を開きます。コアの場所は、いつでもバックグラウンドから来る古い場所を与える
アプリがバックグラウンド状態でない場合、現在の位置はほぼ常に真です。同じVCのバックグラウンドからアプリを呼び出すと、ユーザーが「方向を取得」ボタンをもう一度押すと、現在の場所は一般的に古い場所を示します。一言で言えば、私はマルチタスキングで悩まされており、検索された場所のタイムスタンプは私の問題を解決しませんでした。
IBAction:
if (self.locationManager) {
[_locationManager release];
self.locationManager = nil;
}
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
self.locationTimer = [NSTimer scheduledTimerWithTimeInterval:LOCATION_TIMER target:self selector:@selector(stopUpdatingLocationTimer) userInfo:nil repeats:NO];
HUD = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
[self.locationManager startUpdatingLocation];
コア場所委任:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
NSLog(@"%f",locationAge);
if (locationAge > 3.0)
return;
if (newLocation.horizontalAccuracy < 0)
return;
if (self.currentLocation == nil || self.currentLocation.horizontalAccuracy > newLocation.horizontalAccuracy) {
self.currentLocation = newLocation;
if (self.currentLocation.horizontalAccuracy <= self.locationManager.desiredAccuracy) {
[self stopUpdatingLocations:YES];
}
}
}
マークは、私はAppleのLocateMeのサンプルコードでそれを参照してください、私はコピー:NSTimeInterval locationAgeは= - [newLocation.timestamp timeIntervalSinceNow]。 if(locationAge> 5.0)が返されます。それから、それは間違っていると言いますか? – ubaltaci
ああ、彼らは '-timeIntervalSinceNow'を使用していますので、負の値になります。負の値になると、負の値が逆になります。 (それは私には全く逆のようです)あなたは古い更新情報が得られていることをどのように知っていますか?あなたは彼らが3秒以上過ごしていると確信していますか? –
私は車でテストしたので、最初にアプリを開いて、あらかじめ決められた場所に向かいました。その後、私は2〜2.5km旅行しました。その後、私は再びアプリを起動します(バックグラウンド状態)それは私に古いものである間違った場所を与える。私はこのような3-4回のテストをしており、すべてが間違っています。 – ubaltaci