2010-01-24 3 views
4

J'ai une connexion NSURLC qui fonctionne correctement lorsque j'autorise le chargement. Mais si l'utilisateur appuie sur le bouton de retour, ce qui signifie que la vue Web disparaîtra, je souhaite annuler la connexion NSURLConnection en cours. Mais si l'appel a WebView dans cette classe quand viewWillDissapear est appelée, puis-je faire:Création et annulation d'une connexion NSURLConnection

[conn cancel] 

je reçois une exception NSINValidArgument.

La connexion est définie comme données d'instance dans le fichier .h comme:

NSURLConnection *conn; 

ASYNC est initiée ici:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:articleURL]]; 

    if ([NSURLConnection canHandleRequest:request] && reachable) { 
     // Set up an asynchronous load request 
     conn = [NSURLConnection connectionWithRequest:request delegate:self]; 
     loadCancelled = NO; 
     if (conn) { 
      NSLog(@" ARTICLE is REACHABLE!!!!"); 
      self.articleData = [NSMutableData data]; 
     } 
    } 

Répondre

11

La raison pour laquelle vous avez obtenu l'exception serait vous enregistrez un objet autorelease à une variable d'instance.
"conn" serait automatiquement libéré immédiatement quand un utilisateur cliquait sur le bouton. Après cela, vous appelez annuler. Par conséquent, vous avez eu l'exception.
Pour éviter cela, vous devez conserver l'objet NSURLConnection lorsque vous le conservez dans une variable d'instance.

conn = [[NSURLConnection connectionWithRequest:request delegate:self] retain]; 

ou

conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

Ne pas oublier de libérer ce dans la méthode dealloc.

+0

C'est fait. Avoir plus à apprendre sur la gestion des mem. Merci. –

+0

Je suis content que je puisse vous aider. – tomute