MKDirectionsResponse总是返回nil

时间:2014-04-11 09:49:09

标签: ios7 routes mkmapview mapkit

如果这个问题重复,我很抱歉,但我很难尝试使用MKDirectionsRequest在两个地方之间显示路线。

MKDirectionsRequest *request = [[MKDirectionsRequest alloc] init];
    request.source = [MKMapItem mapItemForCurrentLocation];
    request.transportType = MKDirectionsTransportTypeAny;
    request.destination = _dstItem;
    request.requestsAlternateRoutes = YES;


    MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
   // __block typeof(self) weakSelf = self;
    [directions calculateDirectionsWithCompletionHandler:
     ^(MKDirectionsResponse *response, NSError *error) {

         //stop loading animation here

         if (error) {
             NSLog(@"Error is %@",error);
         } else {
             //do something about the response, like draw it on map
             MKRoute *route = [response.routes firstObject];
             [self.mapView addOverlay:route.polyline level:MKOverlayLevelAboveRoads];
         }
     }];

MKDirectionsResponse总是返回nil,错误描述

Error Domain=MKErrorDomain Code=5 "Directions Not Available" 
UserInfo=0x1700f1c80 {NSLocalizedFailureReason=A route to the nearest road cannot be determined., 
MKErrorGEOError=-403, MKDirectionsErrorCode=6, NSLocalizedDescription=Directions Not Available}

4 个答案:

答案 0 :(得分:4)

MKDirectionsRequest是找到两点之间路线的正确api。苹果似乎尚未为印度增加路线功能。

答案 1 :(得分:3)

Error Domain=MKErrorDomain Code=5 "Directions Not Available"

如果该位置不属于此列表中的任何国家/地区,则您最有可能收到此错误:http://www.apple.com/ios/feature-availability/#maps-directions

在iOS模拟器上,您可以轻松自定义当前位置。有两种方法可以做到:

  • iOS模拟器 - > '调试'标签 - >位置 - > {}选择
  • Xcode - > '调试'标签 - >模拟位置 - > {}选择

答案 2 :(得分:0)

我收到相同的错误信息。如果你提供lat长期的印度它将无法工作,因为苹果没有为印度添加路径功能但尝试与不同的lat长希望它将工作。我尝试相同,它的工作原理我

答案 3 :(得分:0)

我得到同样的错误。我还不知道最好的解决方案。但是我在地图上创建了一个带刷新的按钮,并调用我从viewDidLoad()调用的方法,我想方法,我的方法在从viewDidLoad()计算地址之前立即返回错误。 我的猜测是,viewDidLoad()应该在某个特定的预定义时间内完成。

所以,

<hr/> `-(IBAction)refreshRoute:(id)sender {
         [self routeCalculate];
    }`
<hr/>

而不是

<hr/>

    -(void)viewDidLoad {
    [super viewDidLoad];

    _manager = [[CLLocationManager alloc]init];
    [_manager requestWhenInUseAuthorization];
    [_manager requestAlwaysAuthorization];

    _manager.desiredAccuracy = kCLLocationAccuracyBest;
    _manager.distanceFilter =kCLDistanceFilterNone;

    [_manager requestWhenInUseAuthorization];
    [_manager requestAlwaysAuthorization];
    [_manager startUpdatingLocation];

    [_manager delegate];
    self.pinMap.delegate = self;
    //   [self routeCalculate]; ***** This Call ****
    }

<hr/>