2009-09-15 4 views
62

J'utilise ce NSURLConnection avec des délégués.NSURLConnexion délai d'attente?

nsconnection = [[NSURLConnection alloc] initWithRequest:request 
    delegate:self startImmediately:YES]; 

Problème est le site ne répond pas du tout. Rien, juste tourne dans le navigateur avec une page blanche, pas d'échec. Dans mes délégués, je gère l'échec, mais quand le site ne répond pas, les délégués ne sont pas appelés. Des idées sur la façon de temporiser la connexion?

Répondre

127

Vous pouvez spécifier un délai d'expiration dans votre objet NSURLRequest. Une façon de le faire est de le construire via la méthode requestWithURL:cachePolicy:timeoutInterval:. (Vous pouvez passer le paramètre par défaut NSURLRequestUseProtocolCachePolicy cachePolicy si vous ne voulez pas vous soucier de cette partie.) Le délai d'attente est une valeur à virgule flottante en secondes, comme le sont essentiellement tous les intervalles de temps dans le SDK iPhone.

Assurez-vous également que le délégué de votre NSURLConnection est défini et répond à la méthode connection:didFailWithError:. Une connexion appelle toujours cette méthode ou connectionDidFinishLoading: à la fin de la connexion.

+0

Le délégué fonctionne et ne répond en cas d'erreur est envoyé par le serveur Web. Dans ce cas, le serveur web n'envoie rien. Juste des tours. Je configure la méthode de requête pour ajouter le timeout. Merci – Jordan

+0

Juste vérifié. Il est déjà configuré pour le délai d'expiration. – Jordan

+0

Si vous voulez essayer une alternative à NSURLStuff, un de mes amis a recommandé ASIHTTPRequest (google it) qui est libre d'utilisation, et qui a l'air plutôt sympathique, y compris les fonctionnalités de timeout. – Tyler

24

Modifier: Cette réponse est maintenant obsolète, mais à la date de réponse était exacte.

Je sais que ce sujet est ancien, mais j'ai également rencontré ce problème. Cela s'est produit lors du test de l'application en dehors du réseau interne où les services ont été utilisés. Le service finira par expirer, mais Apple impose une période de 240 secondes (4 minutes) avant que le délai expire. Consultez ce fil pour plus d'informations sur le sujet.

NSMutableURLRequest not obeying my timeoutInterval

+0

Je crois que j'ai corrigé cela en ajoutant NSCredentials à mon application. La non-réactivité était due au fait que le serveur demandait l'authentification, ce que je ne fournissais pas. – Jordan

+3

C'est une mauvaise information! Selon http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLRequest_Class/Reference/Reference.html%23//apple_ref/occ/cl/NSURLRequest, l'intervalle de délai d'attente par défaut est 60 secondes. – stigi

+4

@stigi on dirait que vous faites référence à du matériel pour Mac OS alors qu'ezekielDFM parle d'iOS. – leukosaima