2012-03-28 72 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

這是很容易實現,你可以做同步,異步下載。它還爲代表提供所有需求,也用於進度更新。

我在我的項目中使用了將近一年的時間,從未後悔過。