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. что не так?
Спасибо..
Ответы
Ответ 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