我想從網絡服務器下載文件。在iphone上下載多個文件
場景: 用戶將選擇行(文件名 - 用戶可以選擇1個或多個文件下載),然後按下載,我將獲取每個文件的URL(全部具有不同的URL)並存儲到pathArray中。 如果我不使用for循環即只有一個文件的下載那麼它工作正常,但不與循環做以下
-(void)downloadFile {
for (int i = 0; i<[pathArray count]; i++) {
NSURL *fileURL = [NSURL fileURLWithPath:[pathArray objectAtIndex:i]];
NSString *ResultURL = [fileURL absoluteString];
NSURL *url = [[NSURL alloc] initWithString:ResultURL];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL: url
cachePolicy: NSURLRequestReloadIgnoringCacheData timeoutInterval: 60.0];
conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];
if (conn) {
NSLog(@"*************CONNECTED************");
webData = [[NSMutableData data] retain];
NSLog(@"weblength : %d : ", [webData length]);
downloadTag = YES;
} else {
NSLog(@"*************Connection NOT DONE************");
downloadTag=NO;
}
}
}
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSLog(@"*************Try to receive data************");
[webData appendData:data];
NSLog(@"weblength : %d : ", [webData length]);
NSLog(@"*************Data Received an append too ***********");
if (downloadTag == YES) {
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
self.documentsDir = [[paths objectAtIndex:0]stringByAppendingPathComponent:@"NewResult.zip" ];
[[NSFileManager defaultManager] createFileAtPath:documentsDir contents:nil attributes:nil];
NSFileHandle *file1 = [NSFileHandle fileHandleForUpdatingAtPath: documentsDir];
[file1 writeData: webData];
NSLog(@"Webdata : %d",[webData length]);
[file1 closeFile];
}
}
....它真的非常重要,我來解決這個問題。
非常感謝你
我唯一能說的是,在你當前的循環中,你將發送多個異步請求,但是將數據收集在一個數組中......除非我錯過了某些東西,它將無法工作。 – MiKL
@MiKL,我應該怎麼做呢..請解釋我多一點...我非常困惑。感謝 – Pooja
你總是可以使用'NSURLConnection'來下載信息,例如文件的存儲位置,然後下載它使用'[NSData dataWithContentsOfURL:(NSURL *)]'。要在單獨的線程下載,你可以使用'NSAutoreleasePool',然後調用'NSData'方法。 –