2010-06-29 5 views
1

J'essaie d'obtenir un NSURLConnection pour fonctionner dans mon application. J'ai suivi le code d'Apple presque exactement, mais cela ne semble pas fonctionner. Le NSURLConnection est à l'intérieur d'une méthode appelée, downloadSave. Cette méthode s'exécute correctement à la fin, et mon journal indique "Connection Exists" - cependant rien ne se passe après cela comme si aucune des méthodes déléguées n'était appelée.iPhone NSURLConnection - les délégués ne fonctionnent pas

NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 

    NSString *tempString = [[NSString alloc]initWithFormat:@"http://www.myWebsite.com/%@.jpg",chartFileName]; 
    NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:tempString] 
               cachePolicy:NSURLRequestUseProtocolCachePolicy 
              timeoutInterval:10.0]; 


    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 
    if (theConnection) { 


     mutableData = [[NSMutableData data] retain]; 
     self.image = nil; 
     NSLog(@"connection exists"); 


    } else { 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Connection Error" message:@"There was an error contacting the servers. Please try again." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
     [activityIndicator stopAnimating]; 


    } 

    [pool drain]; 
    [pool release]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 

    NSLog(@"got to connection did receive response"); 
    [mutableData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 

    [mutableData appendData:data]; 
    NSLog(@"got some data were at %i",mutableData.length); 
} 


- (void)connection:(NSURLConnection *)connection 
    didFailWithError:(NSError *)error 
{ 

    [connection release]; 
    // receivedData is declared as a method instance elsewhere 
    self.mutableData = nil; 

    NSLog(@"Connection failed! Error - %@ %@", 
      [error localizedDescription], 
      [[error userInfo] objectForKey:NSErrorFailingURLStringKey]); 
} 


- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 

    NSLog(@"Succeeded! Received %d bytes of data",[mutableData length]); 

//more code follows to display the downloaded image 

} 

La seule chose qui apparaît dans le journal est: « Connexion Exists »

+0

Lorsque vous utilisez un pool de publication, appelez-vous NSURLConnection dans un thread séparé? Par les regards de celui-ci vous créez le NSURLConnection dans le fil de l'enfant mais vos méthodes de délégué sont dans le fil principal que je ne pense pas travailler – Rudiger

Répondre

3

Je ne peux que deviner votre code qui downloadSave en a appelé dans un thread séparé que vous avez un NSAutoreleasePool (ne dis pas c'est ce que votre faire mais c'est probable). NSURLConnection peut uniquement répondre aux méthodes déléguées dans le thread principal lorsqu'il est initialisé dans le thread principal.

Comme NSURLConnection est déjà un appel de délégué threadé, vous ne devriez pas avoir besoin de le créer dans le thread. Si vous devez le fil pour une raison quelconque, vous devriez être en mesure d'utiliser

NSError *error; 
NSURLResponse *response; 
NSData *connectionData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&response error:&error]; 

Et qui devrait renvoyer les données au fil de l'enfant.

Questions connexes