在我的viewDidLoad中,我有这种方法将位置从Parse转变为城市和州。唯一的问题是,它大部分时间都以错误的顺序附加。我在位置变量末尾的.location也是一个将PFGeoPoint转换为CLLocation的自定义方法。
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完成处理程序需要一段时间才能完全执行。我认为这可以通过在没有完成处理的情况下完成所有这些来解决,但我不知道该怎么做。谢谢!
答案 0 :(得分: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!)"
}
}
}