2014-04-29 71 views
0

我正在使用核心位置來存儲緯度/經度座標。我在viewDidLoad中有以下代碼。LocationManager不一致

self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    self.locationManager.distanceFilter = kCLDistanceFilterNone; 
    self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
    [self.locationManager startUpdatingLocation]; 

這是我的委託方法。

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { 
    [self.locationManager stopUpdatingLocation]; 
    CLLocation* loc = [locations lastObject]; // locations is guaranteed to have at least one object 
    float latitude = loc.coordinate.latitude; 
    float longitude = loc.coordinate.longitude; 
    self.lat = [NSString stringWithFormat:@"%.8f",latitude]; 
    self.longString = [NSString stringWithFormat:@"%.8f",longitude]; 
} 

我正在使用GPS來跟蹤這些座標,它似乎不一致。啓動應用後,位置服務圖標不會經常顯示。但是,如果我切換我的無線網絡,它會起作用。或者,如果我打開地圖應用程序並提示它獲取我的當前位置,然後切換到我的應用程序,它將起作用。有時候,它會無視工作。如果位置服務圖標不顯示,那麼我的緯度/經度值爲空。有任何想法嗎?提前致謝!

回答

2

問題是,當第一次更新到達時,您立即停止更新位置。這就像打開和關閉燈開關那麼快,以致燈泡沒有時間開始發光。它需要時間和幾個更新的所有傳感器進行預熱,並得到一個體面的修復,特別是GPS。您需要允許足夠的更新才能到達,直到您確實擁有一個位置(並且您可能希望檢查準確性以確保其位置合理)。

+1

下面的代碼展示瞭如何保持足夠長的時間以獲得良好的位置值,或者在合理的時間後超時:https://github.com/mattneub/Programming-iOS-Book-Examples /blob/master/bk2ch22p773位置/ch35p1032location/ViewController.m – matt

+0

嗯......即使在實現該代碼之後,我仍然有同樣的問題。此外,「這需要太長時間」NSlog不顯示,所以我不知道它是否甚至到達代表。這幾乎就像我需要通過imaps打開GPS以使其工作。 – user2402616

+1

我的例子是可下載的,是一個完整的工作項目。試試看。 – matt