Проблема API Skobbler при перенаправлении

Я использую API-интерфейс skobbler для своего приложения iOS. Как только я указываю исходную и конечную точки для прорисовки маршрута, все работает нормально, и навигация также работает должным образом. Во время навигации я сталкиваюсь с очень случайной и странной проблемой, мое приложение застревает во внутренних потоках и не отвечает.

Во время навигации приложение падает только на некоторых маршрутах и ​​застревает в потоке

Поток 4: EXC_BAD_ACCESS (код =2, адрес = 0x0)

0 Маршрутизатор:: RouteToTrack (CRoute *, SSegmentForRoutingMatching const &, int, int, bool, bool, int &)

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

2 Router:: CreateImpposedRouteImpl (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 ответ

Это то, что Скобллер должен сказать. Не могу сказать, что я думаю, что это правильный ответ...

Все связанные с пользовательским интерфейсом операции (включая рендеринг) должны выполняться в главном потоке, поэтому мы ничего не можем с этим поделать. Учитывая предоставленные детали, мы не можем предложить какие-либо обходные пути. Если при запуске приложения необходимы таймеры, возможно, вы сможете инициализировать инфраструктуру позже, но это зависит от вашей внутренней логики.

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

Другие вопросы по тегам