带字符串的NSURL

时间:2011-04-22 09:38:47

标签: iphone nsurl

我有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。怎么了?

谢谢..

7 个答案:

答案 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