2016-09-23 58 views
3

我想在Swift中使用這裏創建一個路徑,但我有一些問題,因爲完成塊永遠不會被調用,所以我不知道到底是什麼問題。 這裏是我的代碼:NMACoreRouter calculateRouteWithStops沒有回調(swift)

let coreRoute = NMACoreRouter() 

let startPoint = NMAGeoCoordinates(latitude: latitude1, longitude: longitude1) 
let waypoint1 = NMAWaypoint(geoCoordinates: startPoint) 
let middlePoint = NMAGeoCoordinates(latitude: latitude2, longitude: longitude2) 
let waypoint2 = NMAWaypoint(geoCoordinates: middlePoint, waypointType: NMAWaypointType.ViaWaypoint) 
let endPoint = NMAGeoCoordinates(latitude: latitude3, longitude: longitude3) 
let waypoint3 = NMAWaypoint(geoCoordinates: endPoint, waypointType: NMAWaypointType.StopWaypoint) 

let stopList = [waypoint1, waypoint2, waypoint3] // I have also tried adding the NMAGeoCoordinates to array but still no callback 

let routingMode = NMARoutingMode(routingType: NMARoutingType.Fastest, transportMode: NMATransportMode.Car, routingOptions: 0) 

coreRoute.calculateRouteWithStops(stopList, routingMode: routingMode) { (routeResult: NMARouteResult?, error: NMARoutingError?) in 
    if error == nil && routeResult != nil && routeResult!.routes.count > 0 { 
     let route = routeResult!.routes.first as! NMARoute 
     let mapRoute = NMAMapRoute(route: route) 
     self.mapView.addMapObject(mapRoute) 
    } else { 
     // Handle error  
    } 
} 

有沒有人有這個問題的任何想法?

P.S.應用程序ID,應用程序代碼和許可證密鑰沒有問題。 NMAApplicationContext已成功設置在AppDelegate中

+0

您是否收到任何錯誤信息回呢? –

+0

什麼都沒有。完成塊從不被調用。 – razvan

+0

請嘗試在回調中檢查「NMARoutingError.none」的「錯誤」,而不是「無」。你不會得到零,所以你不會在你的案例中輸入你的代碼的這一部分。 – Marco

回答

2

找到解決方案!

您需要聲明NMACoreRouter對象作爲類變量。

class <Class_Name> { 

    var coreRouter: NMACoreRouter! 

    func <Your_Function>() { 

     coreRoute = NMACoreRouter() 

     let startPoint = NMAGeoCoordinates(latitude: latitude1, longitude: longitude1) 
     let waypoint1 = NMAWaypoint(geoCoordinates: startPoint) 
     let middlePoint = NMAGeoCoordinates(latitude: latitude2, longitude: longitude2) 
     let waypoint2 = NMAWaypoint(geoCoordinates: middlePoint, waypointType: NMAWaypointType.ViaWaypoint) 
     let endPoint = NMAGeoCoordinates(latitude: latitude3, longitude: longitude3) 
     let waypoint3 = NMAWaypoint(geoCoordinates: endPoint, waypointType: NMAWaypointType.StopWaypoint) 

     let stopList = [waypoint1, waypoint2, waypoint3] // I have also tried adding the NMAGeoCoordinates to array but still no callback 

     let routingMode = NMARoutingMode(routingType: NMARoutingType.Fastest, transportMode: NMATransportMode.Car, routingOptions: 0) 

     coreRoute.calculateRouteWithStops(stopList, routingMode: routingMode) { (routeResult: NMARouteResult?, error: NMARoutingError?) in 
      if error == nil && routeResult != nil && routeResult!.routes.count > 0 { 
       let route = routeResult!.routes.first as! NMARoute 
       let mapRoute = NMAMapRoute(route: route) 
       self.mapView.addMapObject(mapRoute) 
      } else { 
       // Handle error  
      } 
     }  
    }  
} 

編輯:航海法

let navigationManager = NMANavigationManager.sharedNavigationManager() 
navigationManager.delegate = self 
navigationManager.map = mapView 
navigationManager.startTurnByTurnNavigationWithRoute(route) 
navigationManager.startTrackingWithTransportMode(.Car) 

//Simulation 
sharedPositioningManager.dataSource = NMARoutePositionSource(route: route) 
+0

它真的這樣工作! – razvan

+0

因此,如果我們在函數中聲明NMACoreRouter對象,並且因此不調用回調,則會釋放NMACoreRouter對象。 –

+0

@Burhanuddin Sunelwala或razvan,你介意發佈一個完整頁面的工作示例,包括這個類?我必須從舊的路由管理器(現已棄用)升級到新的核心路由器,並且我正在經歷一段艱難的時期。我知道你曾經不得不提供代理作爲NMARouteManagerDelegate類,但它不再需要我想。請幫助我! –