【问题标题】:CLGeoCoder doesn't append placemarks in right orderCLGeoCoder 未按正确顺序附加地标
【发布时间】:2015-11-26 16:20:38
【问题描述】:

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

【问题讨论】:

    标签: ios swift nsarray cllocation clgeocoder


    【解决方案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!)"
    
        }
    
    }
    }
    

    【讨论】:

    • 谢谢!这解决了它。
    猜你喜欢
    • 2021-08-08
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多