Я делаю запросы на расчет расстояния от моего текущего местоположения до местоположения места разбивки лагеря в массиве countySites
, используя метод calculate()
класса MKDirections
в цикле for
. Когда у меня есть массив длиной 47 мест для кемпинга, рассчитываются только некоторые расстояния для кемпинга, остальные выдают сообщение об ошибке, указывающее на слишком большое количество запросов. Я не знаю, как проверить, что calculate()
не слишком занят, прежде чем я сделаю запрос в цикле for
.
Я попытался поместить в код цикл while
, чтобы неоднократно проверять вычисления, которые все еще обрабатываются с использованием свойства isCalculating
Bool
, но не удается остановить сообщения об ошибках.
countySites = england.counties[selectedCounty!]!
let sourcePlacemark = MKPlacemark(coordinate: currentCoordinate!)
let request = MKDirections.Request()
request.source = MKMapItem(placemark: sourcePlacemark)
request.transportType = .automobile
request.requestsAlternateRoutes = false
let group = DispatchGroup()
activityIndicator.startAnimating()
// Step through sites one by one
for siteIndex in 0..<countySites.count {
var selectedSite = countySites[siteIndex]
let destinationPlacemark = MKPlacemark(coordinate: selectedSite.locationCoordinate)
request.destination = MKMapItem(placemark: destinationPlacemark)
let distanceAndDirections = MKDirections(request: request)
if currentCoordinate != nil {
group.enter()
distanceAndDirections.calculate { (response, error) in
if error == nil {
let distanceInMetres = response?.routes.first?.distance
let distanceInMiles = distanceInMetres! / 1610
let roundedDistanceInMiles = Int(distanceInMiles.rounded())
let distanceToSite = roundedDistanceInMiles
selectedSite.distance = distanceToSite
self.countySites[siteIndex] = selectedSite
} else {
print(error.debugDescription)
}
group.leave()
}
}
}
group.notify(queue: .main) {
self.countySites = self.sortByDistance(sites: self.countySites)
self.tableView.reloadData()
self.activityIndicator.stopAnimating()
}
}
}