Impossible de charger un NSURL avec des espaces ou des hashtags dans l'application iPhone
Twitter a une fonctionnalité intéressante qui vous permet de précharger les messages d'état en utilisant le format suivant:
http://twitter.com/?status=@HelloWorld Hello World
ou alternativement:
http://twitter.com/?status=%40HelloWorld%20Hello%20World
Je suis en train d'ajouter un bouton sur mon iPhone application qui va ouvrir Safari au-dessus de pré-rempli tweet.
Cependant, je suis en cours d'exécution dans le problème où le pourcentage des signes est double échappé.
Voici le code que j'ai essayé:
D'abord un exemple de ce qui fonctionne
NSString* urlText = @"http://www.twitter.com/home?status=@HelloWorld";
NSURL *url = [NSURL URLWithString: urlText];
if (![[UIApplication sharedApplication] openURL:(NSURL*)url])
NSLog(@"%@%@",@"Failed to open url:",[url description]);
Ce code fonctionne comme un charme et sorties:
http://twitter.com/?status=%40HelloWorld
Code qui ne fonctionne pas
NSString* urlText = @"http://www.twitter.com/home?status=@HelloWorld Hello World";
NSURL *url = [NSURL URLWithString: urlText];
if (![[UIApplication sharedApplication] openURL:(NSURL*)url])
NSLog(@"%@%@",@"Failed to open url:",[url description]);
Cela crée une valeur null NSURL. Ce que je peux seulement supposer que, parce que URLWithString n'accepte pas de texte avec des espaces.
J'ai donc essayé ce code:
NSString* urlText = @"http://www.twitter.com/home?status=@HelloWorld%20Hello%20World";
NSURL *url = [NSURL URLWithString: urlText];
if (![[UIApplication sharedApplication] openURL:(NSURL*)url])
NSLog(@"%@%@",@"Failed to open url:",[url description]);
Cependant que crée l'URL:
http://twitter.com/?status=%40HelloWorld%2520Hello%2520World
J'ai donc échappé à mon signe du pourcentage %, ce qui n'est évidemment pas ce que je désirais.
Bien sûr, les gens ont été d'en parler à l'aide de la fonction: stringByAddingPercentEscapesUsingencoding
J'ai donc écrit ce code:
NSString* urlText = @"http://www.twitter.com/home?status=@HelloWorld%20Hello%20World";
urlText = [urlText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString: urlText];
if (![[UIApplication sharedApplication] openURL:(NSURL*)url])
NSLog(@"%@%@",@"Failed to open url:",[url description]);
Toutefois vous de nouveau obtenir le double échappement problème:
http://twitter.com/?status=%40HelloWorld%2520Hello%2520World
Je suis en espérant que quelqu'un puisse connaître une sorte de contourner. Idéalement, je voudrais également inclure des hashtags, mais pour l'instant, juste l'obtention des espaces en serait un énorme pas en avant.
source d'informationauteur Alex
Vous devez vous connecter pour publier un commentaire.
Ainsi, il s'avère que le problème n'était pas causé par le NSURL objet, mais twitter lui-même.
C'est le bon code à utiliser:
Une chose que je ne savais pas à propos de twitter est à l'aide de cette adresse twitter:
auto-escape votre statut.
Tout:
ne sera pas auto-escape.
Essayez ceci:
J'ai créé cette catégorie sur NSString pour l'encodage des chaînes comme Url:
Dans votre cas, vous pouvez l'utiliser comme ceci: