在重新路由期间,Skobbler API的问题

时间:2014-09-16 10:53:53

标签: ios objective-c multithreading skmaps

我正在为我的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];
                                        } 
                                    }

                                 }

1 个答案:

答案 0 :(得分:0)

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

  

所有与UI相关的操作(包括渲染)必须在主线程上完成,因此我们无法对此做任何事情。   考虑到提供的详细信息,我们无法建议任何变通方法。   如果在app启动时需要定时器,也许你可以稍后初始化框架,但这取决于你的内部逻辑。

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