我試圖在檢查基於當前位置的本地數據時,didUpdateToLocation有時失敗,關閉應用程序,旅行一點,再次打開應用程序。會發生什麼是用戶訪問一個地方,檢查列表,去另一個地方,列表更新,但使用舊的位置數據。部隊位置更新
我想確保我有一個新的newLocation。
這段代碼有什麼問題?
double aa,bb,cc;
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
[manager stopUpdatingLocation]; //only stop if new reliable pos fetched.
//old data? retry.
aa=[newLocation.timestamp timeIntervalSinceReferenceDate];
bb=[NSDate timeIntervalSinceReferenceDate];
cc=bb-aa; //must be <60 - minute-fresh
if (cc>60) {
[manager stopUpdatingLocation]; //only stop if new reliable pos fetched.
[manager startUpdatingLocation]; //only stop if new reliable pos fetched.
return;
}
...handle position
}
症狀是cc在應用程序啓動時約爲1200秒,然後在每次重試時增加幾秒鐘。
我試過-[newLocation.timestamp timeIntervalSinceNow]
,同樣的,每次重試都會增加幾秒鐘。有一段時間是2400。
我使用FilterNone和AccuracyBest,如果這可能會影響它。
我接受其他代碼解決方案以確保您擁有全新的位置。
注意:儘管這是基於CLLocationManager的當前行爲的代碼,並且您應該知道行爲可能會發生變化,但它在數月內沒有錯誤報告,可以可靠地運行。所以現在這是我們所有應用程序的可信解決方案,我會將其標記爲答案。真正的答案當然是不可能強制更新位置,但是這個代碼是一個很好的替代品。 –