gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:00:50 26 4
gpt4 key购买 nike

我有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com