2011-11-04 15 views
16

Uomo, perplesso su questo. Cercando di scaricare un file con AFNetworking e il meglio che posso fare è catturare i byte di avanzamento nel downloadProgressBlock. Ho provato molte diverse forcelle di AFNetworking e ora sono tornato all'ultima build. Sembra che contemporaneamente AFHTTPRequestOperation sia stato modificato per includere anche NSURLResponse, ma questo è andato nell'ultima versione. E, secondo il codice qui sotto, il blocco "successo" non viene mai chiamato. Ricevo un log dei byte scaricati e quindi viene chiamato^complete. il successo e l'errore non vengono mai chiamati.AFNetworking - Utilizzo di AFHTTPRequestOperation per scaricare il file?

Qualsiasi consiglio su questo sarebbe fantastico. Non riesco a capire dove vengono restituiti i dati e come farli utilizzare NSFileManager su di esso? Ho bisogno di scaricare file, non scrivere flussi per immagini, ecc.

Modifica: Ho anche provato a catturare i dati eseguendo l'override della connessione (void): didReceiveData come suggerito nella documentazione, ma niente da fare lì.

// url è http://mydomain.com/somezip.zip

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", url]]]; 

AFHTTPRequestOperation *operation = [AFHTTPRequestOperation HTTPRequestOperationWithRequest:request success:^(id object) { 

    NSLog(@"hey, some success!"); 

} failure:^(NSHTTPURLResponse *response, NSError *error) { 

    NSLog(@"%@", error); 

}]; 


[operation setDownloadProgressBlock:^(NSInteger bytesRead, NSInteger totalBytesRead, NSInteger totalBytesExpectedToRead) { 

    // callback is sent in and works great. Just outputting to the console at the moment 
    SEL callme = NSSelectorFromString(callback); 
    [sender performSelectorOnMainThread:callme withObject:[NSNumber numberWithInt:bytesRead] waitUntilDone:NO]; 

}]; 

[operation setCompletionBlock:^{ 
    NSLog(@"operation complete"); 
}]; 

NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; 
[queue addOperation:operation]; 

risposta

64

si può semplicemente utilizzare questa funzionalità inclusa in AFNetworking e anche salvarlo su disco - Avviso del operation.outputStream:

NSMutableURLRequest* rq = [api requestWithMethod:@"GET" path:@"YOUR/URL/TO/FILE" parameters:nil]; 
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:rq] autorelease]; 

NSString* path=[@"/PATH/TO/APP" stringByAppendingPathComponent: imageNameToDisk]; 
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO]; 

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

    NSLog(@"SUCCCESSFULL IMG RETRIEVE to %@!",path) 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

    // Deal with failure 
}]; 

EDIT: missed

[operation start]; 

EDIT: ...or if you use an AFHTTPClient * apiClient :

// [apiClient enqueueHTTPRequestOperation:operation]; 
+3

Qualcuno dare quest'uomo un upvote! E OP dovrebbe selezionare la risposta! – radj

Problemi correlati