AFNetworking + queue + cancelar operaciones + files basura

Estoy descargando algunos files usando AFNetworking usando una queue. Aquí está mi código:

apiClient =[[AFHTTPClient alloc]initWithBaseURL: [NSURL URLWithString:ZFREMOTEHOST]]; for (NSString *element in self.productsArray) { NSURL *url = [NSURL URLWithString:element]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; NSString *documentsDirectory = nil; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); documentsDirectory = [paths objectAtIndex:0]; NSString *targetFilename = [url lastPathComponent]; NSString *targetPath = [documentsDirectory stringByAppendingPathComponent:targetFilename]; op.outputStream = [NSOutputStream outputStreamToFileAtPath:targetPath append:NO]; [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { } failure:^(AFHTTPRequestOperation *operation, NSError *error) { //failure case NSLog(@"BaaZ File NOT Saved %@", targetPath); //remove the file if saved a part of it! NSFileManager *fileManager = [NSFileManager defaultManager]; [fileManager removeItemAtPath:targetPath error:&error]; if (error) { NSLog(@"error dude"); } if ([operation isCancelled]) { //that doesn't work. NSLog(@"Canceled"); } }]; [op setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { if (totalBytesExpectedToRead > 0) { dispatch_async(dispatch_get_main_queue(), ^{ self.progressView.alpha = 1; self.progressView.progress = (float)totalBytesRead / (float)totalBytesExpectedToRead; NSString *label = [NSString stringWithFormat:@"Downloaded %lld of %lld bytes", totalBytesRead,totalBytesExpectedToRead]; self.progressLabel.text = label; }); } }]; [self.resourcesArray addObject:op]; } for (AFHTTPRequestOperation *zabols in self.resourcesArray) { [apiClient.operationQueue addOperation:zabols]; } 

el código funciona bien en la descarga de files, pero quiero cancelar la funcionalidad, así que tengo un button con una acción que tiene el código a continuación:

 [apiClient.operationQueue cancelAllOperations]; 

las operaciones cancelan el file pero luego hay algunos files basura en la carpeta Documentos. Al decir "basura" me refiero a un file que comenzó a download, los cancele y obtuve un file con el mismo nombre, pero inútil no se puede abrir porque está dañado.

¿Cómo puedo evitar que AF lo haga y conservar solo los files completados cuando lo cancelo?

Cualquier ayuda será de gran utilidad.

También intenté cancelar un trabajo por trabajo así:

 for (AFHTTPRequestOperation *ap in apiClient.operationQueue.operations) { [ap cancel]; NSLog(@"%@",ap.responseFilePath); NSFileManager *fileManager = [NSFileManager defaultManager]; [fileManager removeItemAtPath:ap.responseFilePath error:nil]; } 

y eliminar los files basura, pero eso tampoco funciona.

Intente utilizar la extensión AFDownloadRequestOperation , además admite la reanudación de una descarga parcial, utiliza un directory temporal y tiene un bloque especial que ayuda a calcular el progreso de descarga correcto.

También puedes probar eso: github