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