使用Cocoa命令行工具中的特定坐标打开OS X Apple Maps

时间:2015-08-08 18:22:23

标签: objective-c macos cocoa osx-yosemite nstask

我正在尝试启动原生地图应用,并在我的命令行工具中显示OS X中的特定坐标。

我找到了三个选项:

  • 使用[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]];
  • 使用open命令并传递格式化的URL,让系统弄明白。
  • 使用NSTask启动带有网址的Maps.app。

我尝试了第一个:

NSString *url = [NSString stringWithFormat:@"http://maps.apple.com/?q=%@&ll=%f,%f", user[@"realName"], geo.latitude, geo.longitude];
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]];

(它产生一个完全有效的字符串)

但它不起作用。它什么都不做。什么都没有打开,没有错误,没有警告。然后我去了第二个选项。我无法弄清楚如何做第二个,所以我已经转向NSTask。我找到了这个答案:https://stackoverflow.com/a/412573/811405我已将此网址作为参数传递:http://maps.apple.com/?q=Example&ll=12.345,23.456但我得到了:

enter image description here

如何从Cocoa命令行工具中打开具有特定点的地图?

2 个答案:

答案 0 :(得分:2)

显然,您的网址字符串无效,因为其中有空格。因此,[NSURL URLWithString:url]正在返回nil

不要使用字符串格式来构建URL。不要构建可能无效的URL字符串,然后尝试通过调用-stringByAddingPercentEscapesUsingEncoding:来修复它。您无法正确地对整个URL字符串进行百分比转义。每个组件都有不同的有效/无效字符需要转义。

最好的方法是使用NSURLComponents从部分构建您的网址。

如果您不能这样做,请在URL的每个组件上使用-stringByAddingPercentEncodingWithAllowedCharacters:,然后将它们连接在一起。对于查询组件,您将使用URLQueryAllowedCharacterSet

答案 1 :(得分:1)

这是Apple提供的一些documentation about Map Links

当我输入http://maps.apple.com/?ll=12.345,23.456时,地图应用程序会打开一个空白的米色屏幕(因为坐标似乎位于苏丹的沙漠中间)。

从命令行,我能够open "http://maps.apple.com/?q=Cupertino,这很有效。