2014-09-30 112 views
2

我有一個應用程序,收集經緯度/長座標只使用iPad中的GPS芯片(IE沒有WiFi或ios8蜂窩)。它似乎一直工作,除非應用程序閒置大約一個小時(應用程序仍然打開,但iPad鎖。)這是我的代碼CoreLocation停止獲取更新後空閒

我通過按UIButton獲取座標並存儲在IBAction中調用[self.locman startUpdatingLocation];他們到文檔目錄中的文本文件。

// Delegate method from the CLLocationManagerDelegate protocol. 
- (void)locationManager:(CLLocationManager *)manager 
    didUpdateLocations:(NSArray *)locations { 
    // If it's a relatively recent event, turn off updates to save power. 
    CLLocation* location = [locations lastObject]; 
    NSDate* eventDate = location.timestamp; 
    NSTimeInterval howRecent = [eventDate timeIntervalSinceNow]; 
    if (abs(howRecent) < 1) { 
     self.lat = [NSString stringWithFormat:@"%.8f",location.coordinate.latitude]; 
     self.longString = [NSString stringWithFormat:@"%.8f",location.coordinate.longitude]; 
     [self.locman stopUpdatingLocation]; 
    } 
} 

此外,如果它沒有一個小時漫長的沉寂獲得更新,該應用程序也將隨之得到更新,如果用戶在一個小時內再次按下按鈕。所以這似乎是一個熱身問題。

澄清。這似乎是一個時間問題。出於測試目的,我會收集座標....開車5分鐘,並收集座標。我可以在停止之間以5分鐘的間隔做足夠多次。無論屏幕變成空白還是我按下「睡眠」按鈕,這都可以很好地工作。當我單獨離開ipad大約一個小時(路程超過5分鐘)時,問題就出現了。然後,該應用會給我0.000000和0.0000000的座標。

這是我的位置管理器的實例。

self.locman = [[CLLocationManager alloc] init]; 
    //self.locman.pausesLocationUpdatesAutomatically = NO; 
    self.locman.delegate = self; 
    self.locman.desiredAccuracy = kCLLocationAccuracyBest; 
    self.locman.distanceFilter = kCLDistanceFilterNone; 
    self.locman.desiredAccuracy = kCLLocationAccuracyHundredMeters; 
+1

所以你面臨的問題是,當應用程序打開但iPad被鎖定時,位置沒有更新? – 2014-10-08 19:21:26

+0

請參閱我的編輯 – user2402616 2014-10-08 20:34:54

回答

2

您不應該停止更新最近更新的位置,讓框架處理頻率。檢查時間戳以確保您沒有舊的位置數據是個不錯的主意 - 位置管理器通常會立即提供先前緩存的位置數據,然後在可用時提供更新的位置數據。

這是哪一個iOS版本?在iOS 8中,您需要撥打requestAlwaysAuthorization才能在後臺接收位置更新。

您可以提供更多關於如何設置位置管理器的詳細信息嗎?

您的應用程序在某段時間後可能會被系統殺死。如果發生內存泄漏,可能會發生這種情況。

+0

請查看我的編輯以瞭解如何設置位置管理器。另外,我正在使用ios8。同樣在我的原始代碼中,我正在檢查時間戳以拋出緩存的數據;它只是在很長一段時間後才起作用。也許我必須讓'如何最近'更高?我會試着看看註釋'stopUpdatingLocation'是幹什麼的。雖然我相信這隻會產生多個座標,因爲位置管理器永遠不會停止(我不想要的行爲) – user2402616 2014-10-10 17:34:36

+1

在原始代碼中,當時間戳最近時,您將停止位置管理器的更新。如果你這樣做,當時間戳已經足夠時,'self.lat'和'self.longString'將被設置一次,然後你將不再接收更新,除非你在其他地方重新啓動。另外,你設置了'self.locman.desiredAccuracy'兩次;第一條語句被忽略。 – wrightak 2014-10-20 06:55:31