NSURL со строкой - PullRequest
       9

NSURL со строкой

33 голосов
/ 22 апреля 2011

У меня проблема с 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];

но это дает ноль. что не так?

Спасибо ..

Ответы [ 7 ]

58 голосов
/ 22 апреля 2011

Ваша проблема в незаполненных пробелах в URL.Это, например, работает:

    NSURL *url = [NSURL URLWithString:@"tel://1234567890x101"];

Редактировать: Как это ..

    NSURL *url2 = [NSURL URLWithString:[@"tel://1234567890 ext. 101"
        stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
3 голосов
/ 22 апреля 2011

Перед передачей любой строки в качестве URL, которым вы не управляете, вы должны закодировать пробел:

 NSString *dialThis = [prefix stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 // tel://1234567890%20ext.%20101

В качестве примечания, iOS не будет набирать никаких добавочных номеров.Пользователь должен будет сделать это вручную.

С Справочник по схеме Apple URL: Телефонные ссылки :

Чтобы пользователи не могли злонамеренно перенаправлять телефонные звонки или изменятьПоведение телефона или учетной записи приложение Phone поддерживает большинство, но не все, специальные символы в схеме тел.В частности, если URL-адрес содержит символы * или #, приложение «Телефон» не пытается набрать соответствующий номер телефона.

1 голос
/ 19 мая 2016

Если у вас есть что-то, что вы думаете, что должна быть строкой URL, но ничего не знаете о том, как должны создаваться строки URL, вы можете использовать метод NSURL URLWithDataRepresentation:relativeToURL:. Он анализирует строку URL (как байты в NSData) и кодирует символы в процентах по мере необходимости. Используйте NSUTF8StringEncoding для достижения наилучших результатов при преобразовании NSString в NSData.

NSURL *url = [NSURL URLWithDataRepresentation:[@"tel:1234567890 ext. 101" dataUsingEncoding:NSUTF8StringEncoding] relativeToURL:nil];
NSLog(@"%@",url);

создает URL со строкой тел: 1234567890% 20ext.% 20101

Он пытается поступить правильно. Однако для достижения наилучших результатов вы должны найти спецификацию используемой вами схемы URL и следовать ее синтаксису для создания строки URL. Для тел-схемы это https://tools.ietf.org/html/rfc3966.

P.S. У вас был "tel: //" вместо "tel:", что неверно для URL-адреса tel.

1 голос
/ 11 октября 2015

Как и в iOS 9.0,

stringByAddingPercentEscapesUsingEncoding:

устарело.

Используйте следующий метод для преобразования String в NSURL .

let URL = "URL GOES HERE"
let urlString = URL.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet())
1 голос
/ 22 апреля 2011

Я не уверен, что "доб." на какой номер телефона можно ответить? но вы можете попробовать вот так,

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 ','.

Вы можете пойти, чтобы найти доп. эквивалентно тому, что символ в телефоне, а затем заменить его.

но не знаю, может это работать в реальной ситуации или нет ....

0 голосов
/ 26 марта 2015

Сделайте расширение для использования в любой части проекта:

extension String {
    var asNSURL: NSURL! {
        return NSURL(string: self)
    }
}

Теперь вы можете использовать

let myString = "http://www.example.com".asNSURL

или

myString.asNSURL
0 голосов
/ 14 декабря 2014

Попробуйте это, у меня работает ....

NSString *prefix = (@"tel://1234567890 ext. 101");
NSString *dialThis = [NSString stringWithFormat:@"%@", prefix];
NSURL *url = [NSURL URLWithString:[queryString stringByReplacingOccurrencesOfString:@" " withString:@"%20"]];
NSLog(@"%@",url);
...