Невозможно использовать цикл на NMACoreRouter (swift) (HereMap SDK)

#ios #swift #xcode #sdk #heremaps-ios-sdk

Вопрос:

У меня есть проблема, которую я не могу использовать для цикла на NMACoreRouter (SDK HereMap) Если бы я сделал это однажды действием, это все равно сработало бы!. я не знаю, почему не могу применить в цикле. Забавно, что ошибка возвращается во втором цикле, это только ошибка «NMARoutingError»

Вот мой код

 //route
var coreRouter: NMACoreRouter!
var mapRoute: NMAMapRoute?
typealias RouteContainer = (plan: [NMAGeoCoordinates], mode: NMARoutingMode)

 for var shop in pickedShopData {
            
                self.calculateRouteLength(startLat: self.curentUserGeo.latitude, startLong: self.curentUserGeo.longitude, endLat: shop.shopLat, endLong: shop.shopLong)
               
        }

func calculateRouteLength(startLat: Double, startLong: Double, endLat: Double, endLong: Double) {
    
    coreRouter = NMACoreRouter()
    /* Define waypoints for the route */
    let startPoint = NMAGeoCoordinates(latitude: startLat, longitude: startLong)
    let endPoint = NMAGeoCoordinates(latitude: endLat, longitude: endLong)
    /* Initialize a RoutePlan */
    let routePlan = [startPoint, endPoint]
    /*
     * Initialize a RouteOption. HERE Mobile SDK allows users to define their own parameters for the
     * route calculation,including transport modes,route types and route restrictions etc.Please
     * refer to API doc for full list of APIs
     */
    let routeMode = NMARoutingMode()
    /* Other transport modes are also available e.g Pedestrian */
    routeMode.transportMode = NMATransportMode.scooter
    /* Disable highway in this route. */
    routeMode.routingOptions.insert(NMARoutingOption.avoidHighway)
    /* Calculate the shortest route available. */
    routeMode.routingType = NMARoutingType.fastest
    /* Calculate 1 route. */
    routeMode.resultLimit = 3
    
    coreRouter.calculateRoute(withStops: routePlan, routingMode: routeMode,
                              { [self] (result, error) in
            // check error and unwrap route
            guard let route = result?.routes?.first, error == NMARoutingError.none else {
                print("error (error)")
                return
            }
            // check if map object already exist
            if let tempMapRoute = self.mapRoute {
                self.mapView?.remove(mapObject: tempMapRoute)
            }
            // create map object from route
            guard let mapRoute = NMAMapRoute(route) else {
                return
            }
            print("distance (mapRoute.route.length)")
    })
    
}
 

Ответ №1:

Я думаю, ваша проблема в том, что NMACoreRouter все еще вычисляет первый маршрут, пока запускается второй маршрут.

Проверьте NMACoreRouter.IsBusy, чтобы убедиться, что маршрутизатор завершил свои вычисления, пока вы не начнете следующий.

-Карин