2010-06-12 3 views
10

J'ai cet appel à stringwithcontentsofurl:délai d'attente stringwithcontentsofurl

[NSString stringWithContentsOfURL:url usedEncoding:nil error:nil]; 

Comment puis-je donner qu'un délai d'attente simple? Je ne veux pas utiliser de threads ou de files d'attente d'opération (le contenu de l'URL est d'environ 100 caractères), je ne veux juste pas attendre trop longtemps lorsque la connexion est lente.

Répondre

9

Dans ce cas, il vaut mieux utiliser la méthode de classe NSURLConnection+sendSynchronousRequest:returningResponse:error:; il retournera un objet de données que vous pouvez initialiser votre chaîne avec (en utilisant -initWithData:encoding:). Vous pouvez spécifier un délai d'expiration en créant un NSURLRequest en utilisant sa méthode -initWithURL:cachePolicy:timeoutInterval:, puis passer cette requête en tant que premier paramètre de +sendSynchronousRequest:returningResponse:error:.

+0

Great !!, qui était tout comme je l'imaginais !! Merci! – sergiobuj

+1

Le seul problème avec ceci est que vous n'obtenez pas la supposition intégrée de l'encodage que vous faites avec '+ stringWithContentsOfURL: usedEncoding: error:', donc vous devrez rouler les vôtres. –

17

Voici mon avis sur la question:

NSString* link = @"http://example.com"; 
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:link] cachePolicy:0 timeoutInterval:5]; 
NSURLResponse* response=nil; 
NSError* error=nil; 
NSData* data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSString* stringFromServer = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease]; 
+1

Génial! Fonctionne 100% –