我使用以下代码来计算两点之间的路线。我想在请求中添加超时。找不到任何为请求设置超时的方法。
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 :(得分: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
}