Ios 如何在iPhone SDK中从其他应用程序打开地图应用程序

Ios 如何在iPhone SDK中从其他应用程序打开地图应用程序,ios,objective-c,Ios,Objective C,为什么我要开门 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://maps.google.com/maps?saddr=Current Location&daddr=123 Main St,Ottawa,ON"]]; 地图应用程序未打开?此外,就连Safari也没有开业 但当我打开时:http://google.com,Safari通常是开放的。嗯。。。因为这个问题已经有2年多的历史了,并且

为什么我要开门

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://maps.google.com/maps?saddr=Current Location&daddr=123 Main St,Ottawa,ON"]];
地图应用程序未打开?此外,就连Safari也没有开业


但当我打开时:
http://google.com
,Safari通常是开放的。

嗯。。。因为这个问题已经有2年多的历史了,并且已经收到了超过3k的没有答案的意见,我认为是时候有人发布一个了。主要是因为这里的交通流量不断增加


在任何情况下,你都可以在本网站的其他部分找到答案,但对我来说最有魅力的是:

这个答案的主要部分是它解决了iOS 5及以下版本和iOS 6及以上版本

我对答案进行了一些编辑,以符合iOS 7自动附带的arc标准

CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(latitude,longitude);

//create MKMapItem out of coordinates
MKPlacemark* placeMark = [[MKPlacemark alloc] initWithCoordinate:coordinate addressDictionary:nil];
MKMapItem* destination =  [[MKMapItem alloc] initWithPlacemark:placeMark];

if([destination respondsToSelector:@selector(openInMapsWithLaunchOptions:)])
{
    //using iOS6 native maps app
    [destination openInMapsWithLaunchOptions:@{MKLaunchOptionsDirectionsModeKey:MKLaunchOptionsDirectionsModeDriving}];        
} 
else
{
    //using iOS 5 which has the Google Maps application
    NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=Current+Location&daddr=%f,%f", latitude, longitude];
    [[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
}

这是对UIApplication使用canOpenURL:on的复制,以确保您的应用程序报告它可以处理您提供的URL。如果它报告否,那么您的URL很可能在某种程度上存在格式错误。也许你需要逃避它?可能是重复的