2009-11-28 5 views
1

J'essaye d'envoyer les données au serveur de mon client d'IPhone. Cela fonctionne bien pour la plupart des valeurs mais quand j'essaye d'envoyer une chaîne comme "IPhone + Cocoa" le serveur montre la chaîne comme "IPhone Cocoa". J'ai essayé de google, mais sans succès, il n'y a aucune raison de le faire.Bug avec NSURLConnection .....?

Voici mon code

-(void)sendRequestNSString *)aRequest { 

NSMutableURLRequest *request = 
    [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:kURLRequest]]; 

NSString *httpBody = 
[NSString stringWithFormat:@"%@=%@", 
[requestString stringByAddingPercentEscapesUsingEncoding:NSUTF8St ringEncoding], 
[aRequest stringByAddingPercentEscapesUsingEncoding:NSUTF8St ringEncoding]]; 

NSData *aData = [httpBody dataUsingEncoding:NSUTF8StringEncoding]; 

[request setHTTPBody:aData]; 
[request setHTTPMethod:@"POST"]; 

self.feedURLConnection = 
     [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
} 

Je suis vraiment mal à trouver la solution pour cela. Est-ce un bug ou je me trompe d'où dans mon code. existe-t-il une autre alternative?

Répondre

4

-[NSString stringByAddingPercentEscapesUsingEncoding:] ne doit pas être utilisé pour coder des valeurs de paramètres. Il laisse certains caractères spéciaux (+, &, etc) non codés (comme ils devraient l'être si vous encodiez une URL).

Utilisez les éléments suivants:

NSString *escapedParameter = [(NSString*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)unescapedParameter, NULL, CFSTR("?=&+"), kCFStringEncodingUTF8) autorelease]; 

Pas aussi jolie que stringByAddingPercentEscapesUsingEncoding:, mais vous pouvez facilement faire une macro pour cela.

http://arstechnica.com/apple/news/2009/01/iphone-dev-building-proper-mailto-urls.ars a été écrit en Janvier lorsque j'ai découvert des problèmes similaires avec la construction mailto: URL à envoyer à -[UIApplication openURL:].

N.B. Bienvenue sur Stack Overflow! N'oubliez pas de lire le FAQ et de marquer les réponses acceptées pour vos questions (si ce sont de bonnes réponses qui valent la peine d'être acceptées, bien sûr).

+0

Cela a fonctionné pour moi. Merci. J'ai dû enlever la autorelease cependant. –