我正在尝试启动原生地图应用,并在我的命令行工具中显示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
但我得到了:
如何从Cocoa命令行工具中打开具有特定点的地图?
答案 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
,这很有效。