2012-04-07 53 views
0

我试图使用AFNetworking类下载多个文件。我是一个完全新手,我试图找出AFHTTPClient的工作,我已经用操作初始化了一个AFHTTPClient类的对象,但我无法弄清楚如何开始处理操作队列。我也尝试过查看文档,但找不到任何东西。AFHTTPClient多文件下载

这里是我使用的代码:

-(void)downloadFiles:(NSArray *)files { 
    if ([files count] > 0) { 
     NSMutableArray *operationArray = [[NSMutableArray alloc] init]; 
     for (int i = 0; i < [files count]; i++) { 
      ResourceFile *resourceFile = (ResourceFile*)[files objectAtIndex:i]; 

       NSString *urlString = [NSString stringWithFormat:@"%@views/ph_session?args=0", BASE_URL]; 
       NSURL *fileDownloadUrl = [[NSURL alloc] initWithString:urlString]; 
       NSMutableURLRequest *fileDownloadRequest = [[NSMutableURLRequest alloc] initWithURL:fileDownloadUrl]; 
       [fileDownloadRequest setValue:[SessionManager getSessionCookieForLogin] forHTTPHeaderField:@"Cookie"]; 
       void (^successBlock)(NSURLRequest *, NSHTTPURLResponse *, id) = ^(NSURLRequest *request, 
                        NSHTTPURLResponse *response, 
                        id JSON) { 
        NSLog(@"Success callback for file %@", resourceFile.filename); 
       }; 
       void (^failureBlock)(NSURLRequest*, NSHTTPURLResponse*, NSError*, id) = ^(NSURLRequest *request, 
                          NSHTTPURLResponse *response, 
                          NSError *err_, 
                          id JSON) { 
        NSLog(@"Failure callback for file %@", resourceFile.filename); 
       }; 
       AFJSONRequestOperation *operation = [AFJSONRequestOperation 
                JSONRequestOperationWithRequest:fileDownloadRequest 
                success:successBlock 
                failure:failureBlock]; 
       [operationArray addObject:operation]; 
     } 
     if ([operationArray count] > 0) { 
      AFHTTPClient *requestHandler = [[AFHTTPClient alloc] init]; 
      void (^progressBlock)(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations) = ^(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations) { 
       NSLog(@"%d proccesses completed out of %d", numberOfCompletedOperations, totalNumberOfOperations); 
      }; 
      void (^completionBlock)(NSArray *operations) = ^(NSArray *operations) { 
       NSLog(@"All operations completed"); 
      }; 

      [requestHandler enqueueBatchOfHTTPRequestOperations:operationArray 
                progressBlock:progressBlock 
               completionBlock:completionBlock]; 
     } 
    } else { 
     NSLog(@"No file to download"); 
    } 
} 

这里是一流的resourcefile其阵列被传递给这个方法:

#import <Foundation/Foundation.h> 

@interface ResourceFile : NSObject { 
    NSInteger fid; 
    NSString *filemime; 
    NSString *filename; 
    NSString *filesize; 
    NSString *uri; 
    NSString *timestamp; 
} 

@property NSInteger fid; 
@property (retain, nonatomic) NSString *filemime; 
@property (retain, nonatomic) NSString *filename; 
@property (retain, nonatomic) NSString *filesize; 
@property (retain, nonatomic) NSString *uri; 
@property (retain, nonatomic) NSString *timestamp; 

-(id)initWithData:(id)data; 

@end 

可有人请告诉我,我什么做错了?

回答

0

我发现这个问题,我试图用AFJSONRequestOperation AFHTTPClient enqueueBatchOfHTTPRequestOperations,在那里我应该排队AFHTTPOperations入队....