CLGeoCoder不会以正确的顺序附加地标

时间:2015-11-26 16:20:38

标签: ios swift nsarray cllocation clgeocoder

在我的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完成处理程序需要一段时间才能完全执行。我认为这可以通过在没有完成处理的情况下完成所有这些来解决,但我不知道该怎么做。谢谢!

1 个答案:

答案 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!)"

    }

}
}