无法使用两个或更多#NSSL解析NSString

时间:2014-12-03 13:54:37

标签: ios objective-c nsstring nsurl

我有申请使用电话卡拨打自动电话。因此,我需要解析电话号码到nsurl这样打电话。

UIApplication *myApp = [UIApplication sharedApplication];
NSURL *telURL = [NSURL URLWithString:@"tel://18005333333,,,1#,,,421#,,,959538988"];
[myApp openURL:telURL];

我注意到如果有超过1个,我就无法解析NSURL。它总是让我没有。如果我需要超过1#,我可以知道如何解析NSURL吗?

3 个答案:

答案 0 :(得分:1)

如果您可以要求iOS 7.0或更高版本,那么我建议您使用NSURLComponents

NSURLComponents* components = [[NSURLComponents alloc] init];
components.scheme = @"tel";
components.host = @"18005333333,,,1#,,,421#,,,959538788";
NSURL* telURL = components.URL;
[myApp openURL:telURL];

否则,您可能需要使用CFURLCreateStringByAddingPercentEscapes()强制转义“#”字符。在整个URL而不是组件上使用该功能并不正确,但如果您只是在这些类型的URL上使用它而没有除方案和电话号码之外的其他组件,它应该可以工作。

答案 1 :(得分:0)

在您的情况下,您需要使用NSMutableURLRequest而不是openURL,并单独添加参数。

修改 试试这个

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:@"tel://18005333333"];
    [request setValue:@"1#" forHTTPHeaderField:@",,,"];

    [[UIApplication sharedApplication] openURL:request.URL];

答案 2 :(得分:0)

首先删除电话号码字符串中的#,如果拨打电话无关紧要。如下所示

NSString *phoneString=@"18005333333,,,1#,,,421#,,,959538788";

NSString *phonenumberstring = [phoneString stringByReplacingOccurrencesOfString:@"#" withString:@""];

NSURL *phoneUrl = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",[phonenumberstring stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]];
    if ([[UIApplication sharedApplication] canOpenURL:phoneUrl]) {
        [[UIApplication sharedApplication] openURL:phoneUrl];
    } else {
        UIAlertView *noAccess=[[UIAlertView alloc] initWithTitle:@"Title" message:@"Your device doesn't support this feature." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [noAccess show];
    }

(OR)

NSURL *telURL = [NSURL URLWithString:@"tel:18005333333,,,1#,,,421#,,,959538788"];
[callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];

希望它对你有所帮助......