來了,我有VC一CoreLocation經理,當用戶按下「獲取路線」按鈕,我initalize位置管理和應用程序打開谷歌地圖方向與當前位置和一些預定義的目標位置。核心位置,讓原來的位置,每當從背景
這是我的問題,如果應用程序不處於後臺狀態,當前位置幾乎總是如此,如果應用程序從同一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];
}
}
}
馬克,我看到它在蘋果的LocateMe示例代碼,我複製:NSTimeInterval locationAge = - [newLocation.timestamp timeIntervalSinceNow] if(locationAge> 5.0)return;那麼,我們說這是錯的?他們使用'-timeIntervalSinceNow'所以這將是一個負值,然後通過附加的負極接反 – ubaltaci 2011-12-27 23:16:44
哦,對了。 (這似乎完全屁股向我)你怎麼知道你正在得到舊的更新?你確定他們已經超過3秒了嗎? – 2011-12-27 23:24:20
我100%肯定,因爲,我對賽車進行測試,首先我打開應用程序,並獲得方向一些預先定義的場地是正確的,那麼我前往appromixately 2-2.5公里,然後我再次啓動的應用程序(從後臺狀態),它給了我錯誤的位置,這是舊的。我已經測試過3-4次,都是錯的。 – ubaltaci 2011-12-27 23:29:06