【问题标题】:Skobbler API's issue during reroutingSkobbler API 在重新路由期间的问题
【发布时间】:2014-11-10 02:12:01
【问题描述】:

我正在为我的 iOS 应用程序使用 skobbler API。一旦我给出了路线绘制的源点和目的地点,它就可以正常工作,并且导航也可以按预期工作。在导航过程中,我遇到了非常随机和奇怪的问题,我的应用程序卡在内部线程中并且没有响应。

在导航期间,应用程序只会在某些路线上崩溃并卡在线程中

线程 4:EXC_BAD_ACCESS(代码=2,地址=0x0)

0 Router::RouteToTrack(CRoute*, SSegmentForRoutingMatching const&, int, int, bool, bool, int&)

1 Router::CreateImposedRouteImpl(std::tr1::shared_ptr&, bool, bool)

2 Router::CreateImposedRouteImpl(std::tr1::shared_ptr&, bool, bool)

3 RouteManager::computeRouteFromTrack(SRouteManagerInput&, std::tr1::shared_ptr&, std::vector, std::allocator > >&)

4 RouteManager::run()

5 RouteManager::run()

6 _pthread_start

以下是我用于导航的位置坐标 来源:41.847819,-87.666715 目的地:41.860881,-87.693194

这种情况只发生在某些点上,其余位置的导航是完美的!

请提出一些建议,我长期以来一直在寻找解决方案。

这是获取和绘制路线的代码。

          for (SKGPSFileElement *s in routingArray) {
                            if(s.type == SKGPSFileElementGPXTrack)
                            {
                                index++;
                                if(self.trackArray != nil && self.isRouteCalculated == YES)
                                {
                                    __block BOOL sameArray = NO;
                                    for (CLLocation *l in [[SKGPSFilesService sharedInstance] locationsForElement:s]) {
                                        sameArray = NO;
                                        [self.trackArray enumerateObjectsUsingBlock:^(CLLocation *obj, NSUInteger index, BOOL *stop){
                                            if(l.coordinate.latitude == obj.coordinate.latitude && l.coordinate.longitude == obj.coordinate.longitude)
                                            {
                                                *stop = YES;
                                                sameArray = YES;

                                            }
                                        } ];

                                        if(sameArray == NO)
                                            break;
                                    }

                                    if(sameArray == NO)
                                    {
                                         @synchronized([SKRoutingService sharedInstance]){
                                            SKRouteSettings* route = [[SKRouteSettings alloc]init];
                                            route.shouldBeRendered = YES; // If NO, the route will not be rendered.
                                            route.requestAdvices = YES;
                                            route.numberOfRoutes = 1;
                                            [[SKRoutingService sharedInstance]calculateRouteWithSettings:route GPSFileElement:s];
                                        } 
                                    }

                                 }

【问题讨论】:

  • 请同时添加您用于创建路线的代码 sn-p
  • 已向开发团队报告了一个问题 - 我们正在等待他们的答复
  • 谢谢安藤。让我知道。 :)
  • 我已将 iOS 的 SKMaps 框架更新到 2.2,似乎线程卡住问题已得到处理,而不是应用程序卡住,导航停止在两者之间,我收到消息“GPX 轨道导航可用于带有企业许可证的商业用途”在控制台中。
  • 控制台消息正常-应用导航停止不正常(是日志消息,不是断点)-可以查看应用是否运行流畅没有断点?

标签: ios objective-c multithreading skmaps


【解决方案1】:

这是 Skobller 不得不说的。不能说我认为这是一个有效的答案......

所有与 UI 相关的操作(包括渲染)都必须在主线程上完成,因此我们无能为力。 考虑到提供的详细信息,我们无法建议任何解决方法。 如果在应用启动时需要计时器,也许您可​​以稍后初始化框架,但这取决于您的内部逻辑。

http://forum.skobbler.com/archive/index.php/t-7428.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2014-11-27
    • 2013-08-30
    相关资源
    最近更新 更多