首页 > 解决方案 > iOS SDK 中的 Mapbox 导航、重新路由问题

问题描述

即使用户设备位置在同一条路线上,导航也会在每条路线进展后不断重新路由。我认为 Mapbox 只有在用户离开当前路线时才会自动处理重新路由。在我阅读了这部分文档后,我认为我需要手动处理它。

根据文档,我使用以下代码手动处理重新路由,但不推荐使用该代码。

func navigationViewController(_ navigationViewController: NavigationViewController, shouldRerouteFrom location: CLLocation) -> Bool {
        return navigationViewController.routeController.userIsOnRoute(location)
    }

所以崩溃将我重定向到 Mapbox SDK 的这一部分

@available(*, deprecated, renamed: "navigationService", message: "NavigationViewController no longer directly manages a RouteController. See MapboxNavigationService, which contains a protocol-bound reference to the RouteController, for more information.")
/// :nodoc: obsoleted
@objc public final var routeController: RouteController! {
    get {
        fatalError()
    }
    set {
        fatalError()
    }
}

navigationService不包含userIsOnRoute功能。有没有我可以使用的替代功能,或者这是一个错误?

标签: iosroutingsdknavigationmapbox

解决方案


这个问题似乎是一个错误。基于@luugiathuy报告,如果您只是将 SDK 更改为以下代码,是否可以解决所有问题、语音和重新路由问题

index 47d8132..bc44ed7 100644
--- a/ios/Pods/MapboxCoreNavigation/MapboxCoreNavigation/NavigationService.swift
+++b/ios/Pods/MapboxCoreNavigation/MapboxCoreNavigation/NavigationService.swift
@@ -127,7 +127,7 @@ public protocol NavigationService: CLLocationManagerDelegate, RouterDataSo @objc(MBNavigationService)
public class MapboxNavigationService: NSObject, NavigationService, DefaultInterfaceFlag {

-    typealias DefaultRouter = RouteController
+    typealias DefaultRouter = LegacyRouteController

 /**
  The default time interval before beginning simulation when the `.onPoorGPS` simulation

MapboxNavigationService更改RouteControllerLegacyRouteController,一切都会按预期工作。

这个问题持续了将近 4 个月,修改 SDK 不是一个好主意,但这是一个替代解决方案,直到 Mapbox 修复这个问题。


推荐阅读