2011-12-07 13 views
5

मैं एकाधिक कोड डाउनलोड करने और डिस्क पर लिखने के लिए एक सरणी के माध्यम से लूप को इस कोड का उपयोग कर रहा हूं।कई फाइलें डाउनलोड करने के लिए AFNetworking

-(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]; 

लेकिन समस्या यह बाद प्रत्येक फ़ाइल से किया जाता है सफलता ब्लॉक, (जो यह होना चाहिए) कहता है, लेकिन मैं सिर्फ एक अंतिम कॉल बैक की जरूरत है कुछ डेटा को फिर से लोड और एक प्रगति HUD समाप्त करने के लिए है।

सही दिशा में कोई भी पॉइंटर्स बहुत अच्छा होगा।

+0

अरे, आप इस समारोह को कहां कॉल करते हैं? AppDelegate में या एक विशेष नियंत्रक में? इसके अलावा, यदि डाउनलोड समाप्त होने से पहले ऐप छोड़ दिया जाता है तो क्या होता है? धन्यवाद – manishKungwani

उत्तर

5

शायद किसी दिन यह किसी की मदद करेगा, लेकिन मैं ऐसे कामकाज का उपयोग करने में सक्षम था जिसमें शायद बड़े मुद्दे हैं लेकिन यह मेरे सरल उपयोग के लिए ठीक है।

मैंने संसाधित होने के बाद सिंक सरणी से प्रत्येक पंक्ति को हटा दिया, फिर मुझे आवश्यक कोड चलाया।

[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"]; 
    } 
5

आप enqueueBatchOperations को AFHTTPClient उपयोग कर सकते हैं और यह एक completionBlock जो जब सभी कार्यों काम पूरा होने पर कहा जाता है है। वही होना चाहिए जो आप खोज रहे हैं।

+0

मैं सहमत हूं, यह एक बेहतर समाधान है। – ajmccall

+1

लिंक पेज अब उपलब्ध नहीं है ...... –

संबंधित मुद्दे