2016-04-11 46 views
5

因此,iOS9上有新的requestLocation()方法。我試圖用它來獲取只有一個位置更新,但它多次點擊didUpdateLocationsiOS 9中的requestLocation()多次調用didUpdateLocation委託

這不是假設只調用一次嗎?我已將distanceFilter設置爲1000.0,因此幫助快速返回的範圍非常廣泛。有任何想法嗎 ?

即使我在調用委託方法內調用stopUpdatingLocation(),我仍然得到委託的三個命中。

注:當我使用StartUpdatingLocation相反,我想只有一個回報,因爲我想獲得用戶的當前國家,所以喂位置reversegeocoder

在此先感謝

這是發生相同的行爲驗證碼:

func getLocationOneTime(accuracy: Double){ 
    print("Acquiring location one time - accuracy requested:\(accuracy)") 
    locationManager.distanceFilter = accuracy 
    locationManager.desiredAccuracy = accuracy 
    // Start gpsOneTimeTimeout timer 
    gpsTimeoutTimer = NSTimer.scheduledTimerWithTimeInterval(gpsOneTimeTimeout, target: self, selector: #selector(self.reportTimeout), userInfo: nil, repeats: false) 
    locationManager.requestLocation() 
    } 
+0

你在代碼中調用這個方法嗎? –

+0

@Jess更新後代碼 – jelipito

+0

我看到相同的現象。我認爲它是一個錯誤。它與緩存有關(可以通過查看獲取位置的時間戳來看到)。 – matt

回答

4

通常對於這類問題,我只是用一個if語句來防止第一次調用後委託函數改變任何

在這種情況下,如果你只是尋找的位置,我會做:

let locationManager = CLLocationManager() 
var userLocation: CLLocation! 

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 
    if userLocation == nil { 
     if let location = locations.first { 
      userLocation = location 
      self.locationManager.stopUpdatingLocation() 
     } 
    } 
} 

編輯:我看了一下這個蘋果文檔和你正在做正確的事情,我懷疑你會能夠通過任何合理的手段來阻止它。