2012-03-28 42 views
1
多个异步NSURLConnection的

我使用下面的代码来下载从URL的异步文件,UIProgressView在IOS

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

在下载的进展,我想更新进度条,但使用此代码,我不逐渐取得进展,而是等待完成下载并跳到最大值。我怎样才能在价值上逐步取得进展? 有人可以提供一个示例代码?用委托方法的异步方法。 谢谢:)

回答

0

CompletionHandler当然是在完成时执行的。你必须有一个代表连接。使用-initWithRequest:delegate:方法。你将不得不编写的NSURLConnectionDelegate方法,你需要设置progressView价值之一是-connection:didReceiveData:

这里是DOC:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/URLLoadingSystem/URLLoadingSystem.pdf

+0

感谢您的回复,我想同时执行多个下载。那么我如何使用委托方法处理它?而且我还需要更新不同的uiprogressviews上的进度。可能吗? – Mithuzz 2012-03-28 15:41:37

+1

@John你可以将所有的openned连接放在一个数组中,并将它们与**连接中的连接进行比较:didReceiveData:**委托方法来识别当前接收到的数据 – 2012-03-29 09:21:09

+0

@MartinPilch谢谢,但我对此很陌生地区,那么你可以给我看一个示例代码吗? – Mithuzz 2012-03-29 09:25:09

1

如果你不希望在自己的一切代码,我建议在这个任务使用ASIHTTPRequesst:

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

这是很容易实现,你可以做同步,异步下载。它还为代表提供所有需求,也用于进度更新。

我在我的项目中使用了将近一年的时间,从未后悔过。