2014-10-02 98 views
0

我正在從負載中的設備獲取位置(lat \ long),但它每次都返回不同數量的座標(每個座標在1和5之間)。我剛剛進入Swift,我想我錯過了一些東西,但我一直沒有找到任何東西在這個需要使用.stopUpdatingLocation()CLLocationManager返回多個座標

我想我可能會錯過在Swift中的東西,但我我不確定是什麼。

var locationManager = CLLocationManager() 


override func viewDidLoad() { 
    super.viewDidLoad() 

    if(CLLocationManager .locationServicesEnabled()){ 
     locationManager.delegate = self 
     locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters 
     locationManager.requestWhenInUseAuthorization() 
     locationManager.startUpdatingLocation() 
    } 
} 


func locationManager(manager: CLLocationManager!, didUpdateLocations locations:[AnyObject]!) { 
      var locationArray = locations as NSArray 
      var locationObj = locationArray.lastObject as CLLocation 
      var coord = locationObj.coordinate 
      self.locationManager.stopUpdatingLocation() 

      println(coord.latitude) 
      println(coord.longitude) 
    } 

回答

0

這是用Objective-C和Android的同樣的事情,那完全是平常。這些數字將自動迅速穩定下來。

我通常做的是計算兩次連續更新之間的變化,一旦變化非常小 - 這意味着當時我得到了正確的座標。

順便說一下,一旦它穩定下來,我總是會減少位置更新的頻率以節省能源。

+0

PeiGuo - 所以這是由於在viewDidLoad中運行?當我從觸摸或滑動中運行相同的代碼時,我只會得到一組經緯度。只是在移動到viewDidLoad時纔開始這樣做。 – InsertOldUserIDHere 2014-10-07 19:06:46

+0

只有當您最初開始接收位置更新時,纔會發生這種情況,此時您將首先收到一羣不正確的數據。一旦穩定下來,它在同樣的運行過程中保持穩定。由於ViewDidLoad是,我猜,在所有觸摸等之前,這在ViewDidLoad中發生並不意外。畢竟,它與任何特定的方法無關,而是與時間順序有關。 – 2014-10-07 19:57:07