Проблема 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 ответ
Это то, что Скобллер должен сказать. Не могу сказать, что я думаю, что это правильный ответ...
Все связанные с пользовательским интерфейсом операции (включая рендеринг) должны выполняться в главном потоке, поэтому мы ничего не можем с этим поделать. Учитывая предоставленные детали, мы не можем предложить какие-либо обходные пути. Если при запуске приложения необходимы таймеры, возможно, вы сможете инициализировать инфраструктуру позже, но это зависит от вашей внутренней логики.