gpt4 book ai didi

objective-c - MKDirectionsResponse : error, 方向不可用。 (美国)

转载 作者:搜寻专家 更新时间:2023-10-30 20:05:44 29 4
gpt4 key购买 nike

出于学习目的,我正在尝试开发一个应用程序,它将在 MKMapView 上显示到特定点的方向。
但是,无论地址如何,DirectionsResponse 每次都会给我以下错误:

2013-12-28 17:52:23.100 routingApp[378:70b] ERROR
2013-12-28 17:52:23.102 routingApp[378:70b] Directions Not Available

我只有一个带有 map View 的 View Controller 和以下代码:

routingAppViewController.h

@interface routingAppViewController : UIViewController
@property (strong, nonatomic) IBOutlet MKMapView *mapView;
@property (strong, nonatomic) MKPlacemark *destination;
@end

routingAppViewController.m

#import "routingAppViewController.h"

@interface routingAppViewController ()
@end

@implementation routingAppViewController

- (void)viewDidLoad
{
[super viewDidLoad];
NSString *Location = @"385 Mid Avenue Weston";
_mapView.showsUserLocation = YES;
[self getDirections:Location];


}

-(void)getDirections:(NSString *)address{


CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:address
completionHandler:^(NSArray* placemarks, NSError* error){
// Check for returned placemarks
if (placemarks && placemarks.count > 0) {
CLPlacemark *topResult = [placemarks objectAtIndex:0];
// Create a MLPlacemark and add it to the map view
MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];
[self.mapView addAnnotation:placemark];
_destination = placemark;
}
}];

MKMapItem *mapItem = [[MKMapItem alloc] initWithPlacemark:_destination];


MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
request.source = [MKMapItem mapItemForCurrentLocation];

request.destination = mapItem;
request.requestsAlternateRoutes = NO;

MKDirections *directions = [[MKDirections alloc] initWithRequest:request];

[directions calculateDirectionsWithCompletionHandler:
^(MKDirectionsResponse *response, NSError *error) {
if (error) {
NSLog(@"ERROR");
NSLog(@"%@",[error localizedDescription]);
} else {
[self showRoute:response];
}
}];


}

-(void)showRoute:(MKDirectionsResponse *)response
{
for (MKRoute *route in response.routes)
{
[_mapView
addOverlay:route.polyline level:MKOverlayLevelAboveRoads];

for (MKRouteStep *step in route.steps)
{
NSLog(@"%@", step.instructions);
}
}
}

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id < MKOverlay >)overlay
{
MKPolylineRenderer *renderer =
[[MKPolylineRenderer alloc] initWithOverlay:overlay];
renderer.strokeColor = [UIColor blueColor];
renderer.lineWidth = 5.0;
return renderer;
}

错误在getDirections方法中给出。
我在谷歌上搜索了一下,大部分错误意味着该国家/地区不提供方向服务。但是我使用的是美国地址,所以我不明白为什么它不起作用。

注释添加正确,我的位置设置为“Apple”。
帮助非常感谢!

最佳答案

geocodeAddressString 调用的completionHandler block 是异步的。

这意味着试图获取从当前位置到 _destination 的方向的代码在 geocodeAddressString 行之后立即运行并执行 < em>之前 _destination 已设置。

因此,当创建 mapItem 时,它使用的 _destination 仍设置为 nil(地理编码器 block 尚未完成并设置 _destination yet).

尝试获取从当前位置到 nil 的路线会导致获取路线错误。


最简单的修复方法是将获取路线请求的代码移动到 geocodeAddressStringcompletionHandler block 中(紧接在实际设置 _destination 之后):

                 [self.mapView addAnnotation:placemark];
_destination = placemark;

//move the code that gets the directions here,
//inside this block...

MKMapItem *mapItem = [[MKMapItem alloc] init...
...
[directions calculateDirections...
}

关于objective-c - MKDirectionsResponse : error, 方向不可用。 (美国),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817089/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com