Pregunta

Estoy usando este código para recorrer una matriz para descargar varios archivos y escribir en el disco.

-(void)download
{
//set url paths
for (NSString *filename in syncArray)
{
    NSString *urlpath = [NSString stringWithFormat:@"http://foo.bar/photos/%@", filename];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlpath]];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:filename];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];


[operation start];

Pero el problema es que llama al bloque de éxito después de que se realiza cada archivo (lo cual debería), pero solo necesito una llamada final para recargar algunos datos y finalizar un progreso HUD.

Cualquier puntería en la dirección correcta sería genial.

¿Fue útil?

Solución

Tal vez algún día esto ayudará a alguien, pero pude usar una solución que probablemente tenga problemas importantes, pero está bien para mi uso simple.

Acabo de eliminar cada línea de la matriz de sincronización después de que se procesara y luego ejecuté mi código que necesitaba.

 [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Successfully downloaded file to %@", path);
    [SVProgressHUD showWithStatus:@"Updating Photos"];
    [syncArray removeObject:filename];
    if (!syncArray || !syncArray.count) 
    {
    NSLog(@"array empty");
        [[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:self];
        [SVProgressHUD dismissWithSuccess:@"Photos Updated"];
    }

Otros consejos

Puedes usar AfhttpClient para eneueBatchoperations Y esto tiene un bloque de finalización que se llama cuando todas las operaciones están terminadas. Debería ser exactamente lo que estás buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top