Im mit MapKit CLGeocoder(). GeocodeAddressString(), um die Koordinaten und County-Informationen für eine Liste von Adressen zu erhalten. Alles funktioniert gut, solange die Anzahl der Anfragen unter 50 ist, aber alles über 50 und ich habe das Limit der API erreicht. Da CLGeocoder-Aufrufe asynchron sind, kann ich den Fluss der Anrufe (z. B. das Anrufen einer Adresse) nicht einfach steuern/steuern. Wie würde ich das in der "asynchronen Welt" richtig machen? (Disclaimer: Ich bin neu in der Welt der GCD und asynchronen Flusskontrolle, so dass ich glaube, ich könnte eine ausführlichere Antwort erfordern)CLGeocoder geocodeAddressString() trifft das Limit
Hier ist der entsprechende Code:
Methode der Klasseneigenschaft, die CLGeocoder auf die Anrufe Unterkunft Adresse:
func initializeCoordinates() {
let addressForCoords = self.address.getAddress()
CLGeocoder().geocodeAddressString(addressForCoords, completionHandler: { (placemarks, error) -> Void in
if error != nil {
print(error!)
return
}
if placemarks!.count > 0 {
let placemark = placemarks?[0]
let location = placemark?.location
self.coordinates = location?.coordinate
if let subAdminArea = placemark?.subAdministrativeArea {
self.address.county = subAdminArea
}
}
})
}
und dann in dem Abschnitt, in dem ImportVC, die alle die Unterkunft Adressen aus einem textBox importiert (und machen den Anruf zu initializeCoordinates
Methode auf jeder Eigenschaft:
for line in importText {
let newAddress = Address()
let newHouse = Property()
// parse the tab delimited address for each line of input
let address = line.components(separatedBy: "\t")
if address.count == 4 {
newAddress.street = address[0]
newAddress.city = address[1]
newAddress.state = trimState(state: address[2])
newAddress.zip = address[3]
newHouse.address = newAddress
newHouse.initializeCoordinates()
houses.append(newHouse)
}
}