2015-11-26 27 views
0

在我的viewDidLoad中,我有這種方法將位置從Parse轉換爲城市和州。唯一的問題是,它大部分時間順序錯誤。此外,位置變量末尾的.location是一個將PFGeoPoint轉換爲CLLocation的自定義方法。CLGeoCoder不會以正確的順序追加地標

for post in posts { 
let location = ((post["locations"] as! NSMutableArray)[0] as! PFGeoPoint).location 

    CLGeocoder().reverseGeocodeLocation(location()) { (placemarks, error) -> Void in 
     if error != nil { 

      print(error) 

     } else { 

      let p = CLPlacemark(placemark: placemarks![0]) 


      let locationString = "\(p.locality!), \(p.administrativeArea!)" 

      self.locationStrings.append(locationString) 

     } 

    } 
} 

我相信這一切都是由於CLGeoCoder完成處理程序需要一段時間才能完全執行。我認爲這可以通過完成所有這些沒有完成hander,但我不知道如何做到這一點。謝謝!

回答

1

反向地理編碼需要異步完成以防止滯後。您可以使用位置字符串屬性創建一個對象來保存您的發佈位置數據或通常的發佈數據。實例化post對象並將它們添加到數組,然後遍歷它們以檢索位置字符串並將其設置在對象上。例如:

for postObject in postObjects { 
CLGeocoder().reverseGeocodeLocation(postObject.location) { (placemarks, error) -> Void in 
    if error != nil { 

     print(error) 

    } else { 

     let p = CLPlacemark(placemark: placemarks![0]) 


     postObject.locationString = "\(p.locality!), \(p.administrativeArea!)" 

    } 

} 
} 
+0

謝謝!這固定了它。 –