2011-03-01 1 views
4

Je suis en train de télécharger une file d'attente de fichiers en utilisant ASIHTTPRequest. Chaque requête échoue définitivement. Je sais que les URL sont valides, je les ai tracées et les ai jetées dans un navigateur et les fichiers sont là. Je n'ai pas beaucoup d'idées sur la façon de déboguer cela.asihttprequests échec

-(void) getRemoteFiles:(NSMutableArray *) M 
{ 
    [self createFileToAppDirectory]; 

    if (!networkqueue) { 
     networkqueue:[[[ASINetworkQueue alloc] init] autorelease]; 
    } 

    [[self networkQueue] cancelAllOperations]; 

    [self setNetworkQueue:[ASINetworkQueue queue]]; 
    [[self networkQueue] setDelegate:self]; 
    [[self networkQueue] setRequestDidFinishSelector:@selector(requestFinished:)]; 
    [[self networkQueue] setRequestDidFailSelector:@selector(requestFailed:)]; 
    [[self networkQueue] setQueueDidFinishSelector:@selector(queueFinished:)]; 


    int i; 

    for (i=0; i<[M count]; i++) { 
     NSString *url=[M objectAtIndex:i]; 
     NSString* theFileName = [url lastPathComponent]; 
     if ([theFileName isEqualToString:@"nothing"]==NO) { 

      ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:url]]; 
      //[request setDownloadDestinationPath:[self getDirectoryPathForFileName:theFileName]]; 
      [[self networkQueue] addOperation:request]; 

     } 

    } 

    [[self networkQueue] go]; 


} 

EDIT

Je pense avoir trouvé le problème, mais je ne sais pas comment y remédier. Si je change l'URL de la demande à quelque chose de simple comme http://mysite/content/track.mp3 tout fonctionne très bien. Mais quand j'utilise l'URL d'origine, la requête échoue. L'URL originale ressemble à ceci

http://site-media.s3.amazonaws.com/2020 Vision - Deep Tech House et Techno/P_122_DrumLp6.mp3

Je pense qu'il pourrait avoir quelque chose à voir avec les espaces, mais je pensais que NSURL serait gérer ce genre de choses?

+0

Voyez-vous une erreur dans la méthode requestFailed? –

+0

Oui. La méthode requestFailed est en cours d'appel. – dubbeat

+0

Quel message d'erreur voyez-vous? La ligne suivante vous donnera le message d'erreur: Erreur NSError * = [erreur de requête]; –

Répondre

4

Il se trouve que NSURL ne va pas coder en toute sécurité une chaîne d'URL pour vous. Dans mes cas, les espaces dans l'URL causent le problème. La soulution était la suivante:

NSString *safestring=[unsafestring stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];