ios - 如何在mapVIew中添加多重标注

标签 ios swift firebase mapkit mkmapview

我有 ma​​pView 和来自 firebase 的地址。现在我只能在 ma​​pView 中添加一个注释,但是在 print("Address (self.allAddresses)") 中我得到了三个地址:

地址 Москва, Пресненская набережная д.8, квартира 195, подъезд 94

地址 Москва, ул。 Правды д.24 строение 3

地址 Москва,ул.Электрозаводская д.21

如何添加三个或更多注释?

我的火力基地:

{
  «Address» : {
    «AddressOne» : {
      "address" : "Москва, Пресненская набережная д.8, квартира 195, подъезд 94",
    },
    "AddressTwo» : {
      "address" : "Москва, ул. Правды д.24 строение 3",
    },
    "AddressThree» : {
      "address" : "Москва,ул.Электрозаводская д.21",
    }
  }
}

还有我的代码:

class AddressesMapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

    @IBOutlet weak var mapView: MKMapView!

    var allAddresses: String = ""

    var count = 0

    let geocoder = CLGeocoder()

    var addressRef: DatabaseReference!

    override func viewDidLoad() {
        super.viewDidLoad()

        addressRef = Database.database().reference(withPath: "Address")

        loadAddressFromFirebase()

    }
    func loadAddressFromFirebase() {

        addressRef.observe(.value, with: { (snapshot) in

            for address in snapshot.children.allObjects as! [DataSnapshot] {

                let value = address.value as! NSDictionary

                self.allAddresses = value["address"] as? String ?? ""

                print("Address \(self.allAddresses)")

                if self.count < self.allAddresses.count {

                    let addresses = self.allAddresses

                    self.geocoder.geocodeAddressString(addresses, completionHandler: { (placemarks, error) in

                        print("Address - \(addresses)")

                        guard error == nil else { return }

                        guard let placemarks = placemarks else { return }

                        if let placemark = placemarks.first {

                            self.mapView.addAnnotation(MKPlacemark(placemark: placemark))

                        }

                        self.count += 1
                        print("Count - \(self.count)")
                    })
                }   
            }  
        }) 
    }
}

最佳答案

  • 尝试在“for”循环中分配 geoCoder。
  • 调用geocoder.cancelGeocode()方法。

            let geocoder = CLGeocoder()
            geocoder.geocodeAddressString(addresses, completionHandler: { (placemarks, error) in
    
                print("Address - \(addresses)")
    
                guard error == nil else { return }
    
                guard let placemarks = placemarks else { return }
    
                if let placemark = placemarks.first {
    
                    self.mapView.addAnnotation(MKPlacemark(placemark: placemark))
    
                }
    
                self.count += 1
                print("Count - \(self.count)")
                geocoder.cancelGeocode()
            })
    

关于ios - 如何在mapVIew中添加多重标注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46462386/

相关文章:

swift - 在子类中调用例程

java - 如何将多种类型的用户重定向到各自的Activity?

Angular 6 - '"/node_modules/firebase/index "' has no exported member ' 函数'

ios - 设置 WKInterfacePicker 颜色(文本或轮廓)

ios - 来自 Rails 应用程序的 Apple 推送通知

objective-c - 关闭 2 个模态视图 Controller

firebase - 无法将 NSNull 类型的 native AsyncStorage firebase JSON 值 '<null>' 转换为 NSString

ios - 拍摄 View 快照而不将其添加到屏幕

ios - 动画 View 并中途停止

ios - 如何在 iOS 中将表格 View 内的表格单元格中的图像解析为详细 View ?