2017-02-14 7 views
1

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) 
     } 
    } 

ответ

0

Недавно я столкнулся с аналогичной проблемой. Замените for for loop на рекурсивную функцию, которая вызывает себя в конце. Однако трюк состоит в том, чтобы называть его себя с задержкой в ​​0,2 секунды. Я использую 0,4, чтобы быть в безопасности. Это увеличит время ожидания для пользователя, хотя у нас нет выбора из-за ограничения API.

 Смежные вопросы

  • Нет связанных вопросов^_^