UIApplication openUrl 不适用于格式化的 NSString

Posted

技术标签:

【中文标题】UIApplication openUrl 不适用于格式化的 NSString【英文标题】:UIApplication openUrl not working with formatted NSString 【发布时间】:2010-03-28 22:47:53 【问题描述】:

我有以下代码可以打开谷歌地图:

NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@, Anchorage, AK",addressString];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlString]];

但它不起作用并且没有错误。就是打不开。

【问题讨论】:

【参考方案1】:

URLWithString 需要一个百分比转义的字符串。您的示例 url 包含导致创建 nil NSURL 的空格。此外,addressString 还可能包含需要转义的字符。首先尝试对 url 字符串进行百分比转义:

NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@, Anchorage, AK",addressString];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];  

【讨论】:

【参考方案2】:

需要转义 urlString , 否则 [NSURL URLWithString:urlString] 将返回零。

NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@, Anchorage, AK",addressString];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] ]];

【讨论】:

以上是关于UIApplication openUrl 不适用于格式化的 NSString的主要内容,如果未能解决你的问题,请参考以下文章

作为UIApplication单例对象的方法 openURL方法的变化

无法在 [UIApplication sharedApplication] 中使用 openURL 打开 url?

如何拦截任何 UIApplication openURL 调用?

iOS9 application:application openURL: sourceApplication: annotation: 方法不执行

UIApplication openUrl 不适用于格式化的 NSString

如果其他应用程序调用 openURL: 使用有效 URL,UIApplication 会阻止应用程序移动到前台