Подтвердить что ты не робот

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. что не так?

Спасибо..

4b9b3361

Ответ 1

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

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

Изменить: как это делает..

    NSURL *url2 = [NSURL URLWithString:[@"tel://1234567890 ext. 101"
        stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

Ответ 2

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

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

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

Из Ссылка на ссылку URL-адреса Apple: телефонные ссылки:

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

Ответ 3

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

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

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

но dunno это может быть работа в реальной ситуации или нет....

Ответ 4

Как и в случае с iOS 9.0,

stringByAddingPercentEscapesUsingEncoding:

устарел.

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

let URL = "URL GOES HERE"
let urlString = URL.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet())

Ответ 5

Если у вас есть то, что, по вашему мнению, должно быть 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-адрес со строкой tel: 1234567890 %20ext. %20101

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

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

Ответ 6

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

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

Ответ 7

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

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

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

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

или

myString.asNSURL