2010-05-22 3 views
0

J'ai ce codeEnvoi d'un message depuis Objective-C et obtention de la valeur de retour?

NSString *tr = [self sendUrl:@"http://google.com/"]; 

Mais pour une raison quelconque « tr » restera nul après son exécution. Qu'est-ce que je fais mal?

sendUrl:

- (NSString *)sendUrl:(NSString *) uri { 

NSLog(@"Requesting URI 1 ..."); 

// Prepare URL request to download statuses from Twitter 
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:uri]]; 

NSLog(@"Requesting URI 2 ..."); 

// Perform request and get JSON back as a NSData object 
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

NSLog(@"Requesting URI 3 ..."); 

// Get JSON as a NSString from NSData response 
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 

NSLog(@"Requesting URI 4 ..."); 

return json_string; 
} 
+0

Quelle est l'implémentation de sendUrl :? – BoltClock

+0

Ça a l'air bien. Êtes-vous sûr à 100% que votre fonction sendUrl fonctionne? Étape le code et le prouver à vous-même. – blissapp

+0

La sendUrl n'est pas une méthode intégrée, n'est-ce pas? Je ne peux pas le chercher? Pouvez-vous me donner le lien vers la description/la documentation de la méthode? Sans cela, je ne sais pas ce qui peut arriver – vodkhang

Répondre

3

Êtes-vous absolument certain que response non nul? Si votre demande à Google ou où échoue, la réponse sera mis à zéro et l'erreur contiendra des informations qui vous aideront à diagnostiquer l'erreur afin de changer

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

à

NSError* error = nil; 
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error]; 
if (response == nil) 
{ 
    NSLog(@"request failed with error %@", error); 
    // any other error handling 
} 

chose suivante. L'encodage par défaut pour un message HTTP est ISO-8859-1, pas UTF-8. Selon les docs d'Apple, -initWithData: retournera zéro si l'encodage est faux. Vous probablement voulez NSISOLatin1StringEncoding. Je dis "probablement" parce que HTTP a un mécanisme pour vous dire quel encodage de caractères il a utilisé. Je pense que c'est l'en-tête Content-Transfer-Encoding mais je vous conseille de consulter le RFC HTTP de Google pour le savoir. Enfin, si json_string n'était pas nul, il y aurait une fuite. Parce que vous l'avez obtenu avec alloc, vous le possédez, ce qui signifie que vous devez le libérer avant de le renvoyer de sendURL: Ce dernier point n'est pas la cause de votre problème, c'est un bug séparé dans votre code.

Questions connexes