Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在mapVIew中添加多重注释_Ios_Swift_Firebase_Mapkit_Mkmapview - Fatal编程技术网

Ios 如何在mapVIew中添加多重注释

Ios 如何在mapVIew中添加多重注释,ios,swift,firebase,mapkit,mkmapview,Ios,Swift,Firebase,Mapkit,Mkmapview,我有来自firebase的地图视图和地址。现在我只能在地图视图中添加一个注释,但在打印(“地址(self.alladdress)”)中我得到了三个地址: 地址:第8、195、94号 地址:МаСаа,аа。Пааааф.24аааа3 地址:Маааазаааааааааааа1072 如何添加三个或更多注释 我的火力基地: { «Address» : { «AddressOne» : { "address" : "Москва, Пресненская набережн

我有来自firebase的地图视图和地址。现在我只能在地图视图中添加一个注释,但在打印(“地址(self.alladdress)”)中我得到了三个地址:

地址:第8、195、94号

地址:МаСаа,аа。Пааааф.24аааа3

地址:Маааазаааааааааааа1072

如何添加三个或更多注释

我的火力基地:

{
  «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)")
                    })
                }   
            }  
        }) 
    }
}
类地址MapViewController:UIViewController、MKMapViewDelegate、CLLocationManagerDelegate{
@ibvar映射视图:MKMapView!
var alladdress:String=“”
变量计数=0
让geocoder=CLGeocoder()
var addressRef:DatabaseReference!
重写func viewDidLoad(){
super.viewDidLoad()
addressRef=Database.Database().reference(带路径:“地址”)
loadAddressFromFirebase()
}
func loadAddressFromFirebase(){
addressRef.observe(.value,其中:{(快照)位于
snapshot.children.allObjects中的地址为![DataSnapshot]{
设value=address.value为!NSDictionary
self.allAddresses=值[“地址”]为?字符串??“
打印(“地址\(self.allAddresses)”)
如果self.count
  • 尝试在“for”循环中分配地理编码器
  • 调用
    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()
            })
    

这行(
self.mapView.addAnnotation
)是否运行三次?一次。我认为这是个问题,但我不明白该怎么办for循环会迭代3次吗?不,我认为这是因为geocoder只能处理一个地址,但我可能是错的太好了,它成功了,非常感谢。为什么我不想尝试删除一个循环…)