2015-09-18 6 views
0

Я использую следующий код для расчета маршрута между двумя точками. Я хочу добавить тайм-аут к запросу. Не удалось найти какой-либо метод для установки таймаута для запроса.Добавить таймаут в MKDirectionsRequest

MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init]; 
[request setSource:sourceMapItem]; 
[request setDestination:destMapItem]; 
[request setTransportType:MKDirectionsTransportTypeWalking]; //Change Here 
[request setRequestsAlternateRoutes:YES]; 


MKDirections *directions = [[MKDirections alloc] initWithRequest:request]; 
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error) { 
    // do your thing here 
}]; 

ответ

0

обходной путь: Создать таймер и решить, показывать/не показывать маршрут, когда calculateDirectionsWithCompletionHandler завершается в соответствии с текущим значением вашего таймера.


Я не знаю, почему вам нужен тайм-аут, но в моем случае я имел представление коллекции и когда пользователь прокручивает я показать маршрут к текущему элементу карты.

и у меня было несколько маршрутов на карте, когда пользователь прокручивался так быстро.

Что я реализовать использует таймер перед выполнением запроса маршрута (так что если пользователь прокручивает поиска маршрута не начнется сразу же начнется во времени, но будет отменен, если пользователь переключается на другой объект на карте)

То, что также может быть реализовано, - это отменить MKDirectionsRequest. Но это не работает, если isCalculating = истина:

// Any calls to -calculateDirectionsWithCompletionHandler: or calculateETAWithCompletionHandler 
// while -[MKDirections isCalculating] will fail. completionHandler will be called on the main queue 
public func calculateDirectionsWithCompletionHandler(completionHandler: MKDirectionsHandler) 
public func calculateETAWithCompletionHandler(completionHandler: MKETAHandler) 
public func cancel() 

Так что, если вы хотите, чтобы стремиться убить обработчик события, когда ответ есть, что вы могли бы сделать, это проверить последний пункт

if let _ = response where (mapItem == self?.latestMapItem) { 
    self?.showRoute(response!, itemLocation: mapItem) 
    self?.routeInfoView.hidden = false 
} 
Смежные вопросы