向MKDirectionsRequest添加超时

时间:2015-09-18 05:36:13

标签: ios objective-c mapkit

我使用以下代码来计算两点之间的路线。我想在请求中添加超时。找不到任何为请求设置超时的方法。

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
}]; 

1 个答案:

答案 0 :(得分:0)

解决方法:创建一个计时器,并根据计时器的当前值决定在calculateDirectionsWithCompletionHandler完成时显示/不显示路径。

我不知道为什么你需要超时但在我的情况下我有一个集合视图,当用户滚动我显示到当前地图项的路线。

当用户滚动如此之快时,我在地图上有多条路线。

我实施的是在执行路径请求之前使用计时器(因此,如果用户正在滚动路径搜索将不会立即启动,将会及时启动,但如果用户切换到另一个地图项目将被取消)

还可以实现取消MKDirectionsRequest。但如果isCalculating = true,它就不起作用:

// 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
}