Im использует MapGit CLGeocoder(). GeocodeAddressString(), чтобы получить координаты и сведения о графстве для списка адресов. Все работает отлично, пока количество запросов меньше 50. Но что-то более 50 и лимит API. Поскольку вызовы CLGeocoder являются асинхронными, я не могу легко управлять потоком вызовов (например, вызывать один адрес за раз, например). Как я буду делать это правильно в «асинхронном мире»? (ОТКАЗ: Я новичок в мире НОД и контроля асинхронного потока, так что я думаю, что, возможно, потребуется более подробный ответ)CLGeocoder geocodeAddressString() достигает предела
Вот соответствующий код:
метод класса собственности, которая вызывает CLGeocoder на Адрес Недвижимость с:
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
}
}
})
}
, а затем в разделе в ImportVC, который импортирует все адреса отеля от TextBox (и делает вызов метода initializeCoordinates
на каждой собственности:
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)
}
}