CLGeoCoder 未按正确顺序附加地标

Posted

技术标签:

【中文标题】CLGeoCoder 未按正确顺序附加地标【英文标题】:CLGeoCoder doesn't append placemarks in right order 【发布时间】: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 完成处理程序需要一段时间才能完全执行。我认为这可以通过在没有完成处理程序的情况下完成所有这些来解决,但我不知道该怎么做。谢谢!

【问题讨论】:

【参考方案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!)"

    



【讨论】:

谢谢!这解决了它。

以上是关于CLGeoCoder 未按正确顺序附加地标的主要内容,如果未能解决你的问题,请参考以下文章

CLGeocoder 曾经返回一个地标

嵌套 Cloudkit 查询未按正确顺序打印

测试 CLGeocoder geocodeAddressString 方法地标始终为零

当使用 CLGeocoder 的 ResreverseGeocodeLocation 但返回的地标为 nil 并且 kCLErrorDomain 错误 =8

Firebase 查询未按正确顺序执行?

条带 webhook 未按正确顺序传入的错误