J'ai un problème avec NSURL. J'essaie de créer NSURL avec une chaîne
code
NSString *prefix = (@"tel://1234567890 ext. 101");
NSString *dialThis = [NSString stringWithFormat:@"%@", prefix];
NSURL *url = [[NSURL alloc] initWithString:dialThis];
NSLog(@"%@",url);
a également essayé
NSURL *url = [NSURL URLWithString:dialThis];
mais cela donne null. Qu'est-ce qui ne va pas ?
Merci..
Votre problème est les espaces non échappés dans l'URL. Cela, par exemple, fonctionne:
NSURL *url = [NSURL URLWithString:@"tel://1234567890x101"];
Edit: Comme cela ..
NSURL *url2 = [NSURL URLWithString:[@"tel://1234567890 ext. 101"
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
Avant de passer une chaîne comme URL que vous ne contrôlez pas, vous devez encoder l'espace blanc:
NSString *dialThis = [prefix stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// tel://1234567890%20ext.%20101
En remarque, iOS ne composera aucune extension. L'utilisateur devra le faire manuellement.
De Référence du schéma d'URL Apple: Liens téléphoniques :
Pour empêcher les utilisateurs de rediriger par malveillance les appels téléphoniques ou de modifier le comportement d'un téléphone ou d'un compte, l'application Téléphone prend en charge la plupart des caractères spéciaux du schéma tel, mais pas tous. Plus précisément, si une URL contient les caractères * ou #, l'application Téléphone n'essaie pas de composer le numéro de téléphone correspondant.
Comme avec iOS 9.0,
stringByAddingPercentEscapesUsingEncoding:
est obsolète.
Utilisez la méthode suivante pour convertir String en NSURL .
let URL = "URL GOES HERE"
let urlString = URL.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet())
Si vous avez quelque chose que vous pensez devrait être une chaîne URL mais que vous ne savez rien sur la façon dont les chaînes URL sont censées être construites, vous pouvez utiliser la méthode URLWithDataRepresentation:relativeToURL:
De NSURL. Il analyse la chaîne URL (en octets dans un NSData) et code les caractères en pourcentage selon les besoins. Utilisez le NSUTF8StringEncoding
Pour de meilleurs résultats lors de la conversion de votre NSString en NSData.
NSURL *url = [NSURL URLWithDataRepresentation:[@"tel:1234567890 ext. 101" dataUsingEncoding:NSUTF8StringEncoding] relativeToURL:nil];
NSLog(@"%@",url);
crée une URL avec la chaîne tel: 1234567890% 20ext.% 20101
Il tente de faire la bonne chose. Cependant, pour de meilleurs résultats, vous devez trouver la spécification du schéma d'URL que vous utilisez et suivre sa syntaxe pour créer votre chaîne d'URL. Pour le schéma tel, c'est https://tools.ietf.org/html/rfc3966 .
P.S. Vous aviez "tel: //" au lieu de "tel:" qui est incorrect pour une URL tel.
Je ne suis pas sûr que le "ext." dans le numéro de téléphone peut être répondu par quelle valeur? mais vous pouvez essayer comme ça,
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 ','.
vous pouvez aller chercher l'ext. est équivalent à quel symbole dans le téléphone, puis remplacez-le.
mais il peut ne pas fonctionner en situation réelle ou non ....
Essayez celui-ci, cela fonctionne pour moi ....
NSString *prefix = (@"tel://1234567890 ext. 101");
NSString *dialThis = [NSString stringWithFormat:@"%@", prefix];
NSURL *url = [NSURL URLWithString:[queryString stringByReplacingOccurrencesOfString:@" " withString:@"%20"]];
NSLog(@"%@",url);
Faites également une extension pour l'utiliser dans n'importe quelle partie du projet:
extension String {
var asNSURL: NSURL! {
return NSURL(string: self)
}
}
A partir de maintenant, vous pouvez utiliser
let myString = "http://www.example.com".asNSURL
ou
myString.asNSURL