UIProgressView在iOs中具有多个异步NSURLConnection

时间:2012-03-28 13:06:26

标签: iphone ios asynchronous nsurlconnection uiprogressview

我正在使用以下代码从url中异步下载文件,

 NSMutableData *responseData = [[NSMutableData alloc] init];
        NSURL *url = [NSURL URLWithString:@"http://www.tuiscos.com/images/trading.png"];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        [NSURLConnection sendAsynchronousRequest:request 
                                           queue:[NSOperationQueue mainQueue] 
                               completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                                   // do something with data
                                   [responseData appendData:data];
                                   myImage8.image = [UIImage imageWithData:data];
                                   NSInteger len = response.expectedContentLength;
                                   NSInteger receiverdBytes = 0;
                                   receiverdBytes = data.length+ receiverdBytes;
                                   float prog = (float)[responseData length]/(float)len;
                                   [progress8 setProgress:prog];
                               }];

随着下载的进行,我想更新进度条,但是使用这段代码,我没有逐渐进步,而是等待完成下载并跳转到最大值。我怎样才能在价值上逐步取得进步? 有人可以提供示例代码吗?对于使用委托方法的异步方法。 谢谢:))

2 个答案:

答案 0 :(得分:1)

如果您不想自己编码所有内容,我建议您在此任务中使用ASIHTTPRequesst:

http://allseeing-i.com/ASIHTTPRequest/How-to-use

实现起来非常简单,您可以同时进行异步下载。它还为代表提供了所有需求,也为进度更新提供了支持。

我在我的项目中使用它已近一年了,从不后悔。

答案 1 :(得分:0)

当然,CompletionHandler在完成时执行。您必须有一个委托才能建立连接。使用-initWithRequest:delegate:方法。您必须编写NSURLConnectionDelegate方法的代码,并且您需要设置progressView的值是-connection:didReceiveData:

以下是文档:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.pdf