2015-06-16 16 views
8

Sto tentando di scaricare un file utilizzando AFNetworking (2.5.4). Completato il download, il gestore di completamento si chiama, con l'errore set a zero, tutto bene apparente, ma il file di destinazione non esiste:AFNetworking downloadTaskWithRequest: progress: destination: completionHandler: scrittura del file sul percorso

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
NSString *fullPath = [valid path from my apps local manager] 
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:req progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { 
    return [NSURL URLWithString:fullPath]; 
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) { 
    NSLog(@"Saved file to %@.", filePath); 
    *** [[NSFileManager defaultManager] fileExistsAtPath:filePath.absoluteString] returns NO here *** 
}]; 
[cell.progressView setProgressWithDownloadProgressOfTask:downloadTask animated:YES]; 
[downloadTask resume]; 

Il percorso del file è un percorso regolare che la mia applicazione ha accesso in scrittura:

/var/mobile/Containers/Data/Application/APP-GUID-REDACTED/Documents/FILE-NAME-REDACTED.docx

stavo usando un metodo diverso prima AFNetworking, e potrebbe scrivere al percorso esattamente lo stesso bene. Le intestazioni di risposta HTTP mostrano tutto perfettamente (stato 200, lunghezza del contenuto corretta, ecc.) E se si arriccia l'URL di download scarica il file senza problemi. Non ci sono problemi con il file.

Perché il mio file di destinazione non è stato scritto nel gestore di completamento nonostante nessun errore?

UPDATE: Ho anche provato AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; ma non cambia nulla. Ho anche provato a creare un puntatore NSProgress e inviarlo per l'argomento progress, ma senza risultato.

risposta

15

Usa [NSURL fileURLWithPath:] (non URLWithString).

return [NSURL fileURLWithPath:fullPath]; 
+0

Ha funzionato. Non so perché l'altro non funzionava. –

0

Il problema qui è percorso file errato o percorso file non valido. Ho avuto lo stesso problema qui.

Crea percorso come indicato di seguito:

NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil]; 
NSURL *filePathURL = [documentsDirectoryURL URLByAppendingPathComponent:[NSString stringWithFormat:@"your file name here",i]]; 

Ora usano sopra percorso:

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:req progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) { 
    return filePathURL; 
} 
+0

Copia-incolla, nulla è cambiato. Il tuo codice produce esattamente lo stesso percorso del mio ed è di nuovo zero. –