2011-02-14 4 views
0

Comment puis-je demander une nouvelle tentative sur un NSURLConnection? dans ma méthode connectionDidFinishLoading est-il possible de stocker et de réessayer plus tard la connexion? J'ai regardé [connexion démarrer], mais cela n'a pas l'air de faire quoi que ce soit. L'objet de connexion contient-il toujours la demande d'origine?NSURLConnection réessayer demande

Merci

Répondre

6

Ce n'est pas dit explicitement, mais toujours documentation suggère que NSURLConnection instance n'est pas destinée à être réutilisée:

NSURLConnection conserve son délégué lors de son initialisation. Il libère le délégué lorsque la connexion se termine le chargement, échoue ou est annulée.

Si le délégué est déjà libéré, il n'y a vraiment aucun intérêt à réanimer l'objet de connexion.

+0

merci Nikita, alors quelle est la meilleure façon de relancer une demande de connexion réussie? – user609906

+1

@ user609906 Créer un nouvel objet de connexion. (Vous pouvez réutiliser à la fois les objets request et delegate, si vous ne les laissez pas être libérés) –

0

Si j'étais vous, je voudrais regarder ASIHTTPRequest, qui est à la fois beaucoup plus facile à utiliser que l'entreprise intégrée NSURLConnection, mais aussi beaucoup plus riche en fonctionnalités. Vous pouvez spécifier le nombre de tentatives, le délai d'attente et, fondamentalement, tous les aspects d'une requête HTTP.

+3

Pour quiconque trébuche sur ce sujet: ASIHTTPRequest n'est plus maintenu. Le développeur suggère un certain nombre d'alternatives telles que AFNetworking. – lorean

+0

Merci, @lorean. J'ai recommandé ASIHTTPRequest tant de fois dans mon historique de publication, je continue de trouver plus d'endroits où je dois revenir et publier des mises à jour avec l'annonce de dépréciation ... –

0

Vous pouvez résoudre ce problème en conservant l'objet NSMutableURLRequest d'origine et créer à nouveau la connexion, sur Swift, il ressemble à ceci:

class MyConnectionHandler { 
    var request:NSMutableURLRequest? 
    var connection: NSURLConnection? 
    var retryCount=0 
    var maxRetries=2 

    ... 
    functions to setup the request object, and create a connection 
    ---- 

    func connection(connection: NSURLConnection, didFailWithError error: NSError) { 
     if(retryCount<maxRetries) { 
      retryCount++ 
      self.connection=NSURLConnection(request: request!, delegate: self, startImmediately: true) 
     } else { 
      <throw a tantrum> 
     } 
    }