2011-12-27 414 views
2

來了,我有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]; 

    } 

} 

}

回答

0

在您的例子locationAge是由於newLocationtimestamp的秒數的負表示。這意味着,locationAge永遠不會大於3,你就有效地使通過篩板每次更新。

設置locationAge這樣的:

NSTimeInterval locationAge = [newLocation.timestamp timeIntervalSinceNow]; 
+0

馬克,我看到它在蘋果的LocateMe示例代碼,我複製:NSTimeInterval locationAge = - [newLocation.timestamp timeIntervalSinceNow] if(locationAge> 5.0)return;那麼,我們說這是錯的?他們使用'-timeIntervalSinceNow'所以這將是一個負值,然後通過附加的負極接反 – ubaltaci 2011-12-27 23:16:44

+0

哦,對了。 (這似乎完全屁股向我)你怎麼知道你正在得到舊的更新?你確定他們已經超過3秒了嗎? – 2011-12-27 23:24:20

+0

我100%肯定,因爲,我對賽車進行測試,首先我打開應用程序,並獲得方向一些預先定義的場地是正確的,那麼我前往appromixately 2-2.5公里,然後我再次啓動的應用程序(從後臺狀態),它給了我錯誤的位置,這是舊的。我已經測試過3-4次,都是錯的。 – ubaltaci 2011-12-27 23:29:06

0

對於那些誰遇到同樣的問題,

此外,與網絡核心位置相關的一些教程,導致我這個問題。

當然,我保持CLLocation ivar在我的VC中,每當CLLocation ivar 集合和谷歌地圖調用,我的應用程序去背景。

然後,我的應用程序由用戶從後臺調用,並開始更新位置,
老CLLocation伊娃不是零,可能是最好的horizantal準確性然後 新來了。因此;

if (self.currentLocation == nil || self.currentLocation.horizontalAccuracy > newLocation.horizontalAccuracy) 

這一行的原因的問題,老位置CLLocation伊娃 從未更換。

因此,我改變viewDidDisappear這樣,我分配零值CLLocation變量和完美的作品。

P.S:謝謝你馬克·亞當斯