我有NSURL的问题。我正在尝试使用字符串
创建NSURL码
NSString *prefix = (@"tel://1234567890 ext. 101");
NSString *dialThis = [NSString stringWithFormat:@"%@", prefix];
NSURL *url = [[NSURL alloc] initWithString:dialThis];
NSLog(@"%@",url);
也尝试了
NSURL *url = [NSURL URLWithString:dialThis];
但它给出了null。怎么了?
谢谢..
答案 0 :(得分:57)
您的问题是网址中未转义的空格。例如,这可以起作用:
NSURL *url = [NSURL URLWithString:@"tel://1234567890x101"];
编辑:就像这样..
NSURL *url2 = [NSURL URLWithString:[@"tel://1234567890 ext. 101"
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
答案 1 :(得分:3)
在将任何字符串作为您无法控制的URL传递之前,您必须对空白进行编码:
NSString *dialThis = [prefix stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// tel://1234567890%20ext.%20101
作为旁注,iOS不会拨打任何分机。用户必须手动执行此操作。
来自Apple URL Scheme Reference: Phone Links:
为防止用户恶意重定向电话或更改电话或帐户的行为,电话应用程序支持tel方案中的大多数但不是全部特殊字符。具体来说,如果URL包含*或#字符,则电话应用程序不会尝试拨打相应的电话号码。
答案 2 :(得分:1)
我不确定“分机”。在电话号码可以按什么值重复?但你可以尝试这样,
NSString *prefix = [NSString stringWithString: @"tel://1234567890 ext. 101"];
NSString *dialThis = [NSString stringWithFormat:@"%@", prefix];
NSURL *url = [NSURL URLWithString:[dialThis stringByReplacingOccurrencesOfString:@" ext. " withString:@"#"]];
// it might also represent by the pause symbol ','.
你可以去找分机。相当于手机中的符号,然后更换它。
但不知道它是否可以在实际情况下工作....
答案 3 :(得分:1)
与iOS 9.0一样,
stringByAddingPercentEscapesUsingEncoding:
已被弃用。
使用以下方法将字符串转换为 NSURL 。
let URL = "URL GOES HERE"
let urlString = URL.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet())
答案 4 :(得分:1)
如果您有某些内容,认为应该是一个URL字符串,但对如何构建URL字符串一无所知,则可以使用NSURL的URLWithDataRepresentation:relativeToURL:
方法。它解析URL字符串(作为NSData中的字节)并根据需要对字符进行百分比编码。将NSString转换为NSData时,使用NSUTF8StringEncoding
可获得最佳效果。
NSURL *url = [NSURL URLWithDataRepresentation:[@"tel:1234567890 ext. 101" dataUsingEncoding:NSUTF8StringEncoding] relativeToURL:nil];
NSLog(@"%@",url);
使用字符串 tel:1234567890%20ext。%20101
创建一个网址尝试做正确的事情。但是,为了获得最佳结果,您应该找到所使用的URL方案的规范,并按照其语法创建URL字符串。对于tel方案,即https://tools.ietf.org/html/rfc3966。
P.S。您有“tel://”而不是“tel:”,这对于tel URL是不正确的。
答案 5 :(得分:0)
尝试这个,它对我有用....
NSString *prefix = (@"tel://1234567890 ext. 101");
NSString *dialThis = [NSString stringWithFormat:@"%@", prefix];
NSURL *url = [NSURL URLWithString:[queryString stringByReplacingOccurrencesOfString:@" " withString:@"%20"]];
NSLog(@"%@",url);
答案 6 :(得分:0)
扩展以便在项目的任何部分使用:
extension String {
var asNSURL: NSURL! {
return NSURL(string: self)
}
}
从现在起,您可以使用
let myString = "http://www.example.com".asNSURL
或
myString.asNSURL