我使用這個代碼:NSURLConnection的過程中更新iPhone UIProgressView下載
NSURLConnection *oConnection=[[NSURLConnection alloc] initWithRequest:oRequest delegate:self];
下載一個文件,我想更新我加載一個子視圖的進度條。爲此,我使用下面的代碼:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[oReceivedData appendData:data];
float n = oReceivedData.length;
float d = self.iTotalSize;
NSNumber *oNum = [NSNumber numberWithFloat:n/d];
self.oDPVC.oProgress.progress = [oNum floatValue];
}
子視圖是oDPVC,它的進度條是oProgress。設置progress屬性不會更新控件。
從我在網上閱讀的文章中,很多人都想要做到這一點,但還沒有一個完整的,可靠的樣本。另外,還有很多矛盾的建議。有些人認爲你不需要單獨的線程。有人說你需要一個後臺線程進行更新。有些人說不,在後臺做其他事情並更新主線程的進度。
我試過所有的建議,而且沒有一個適合我。
還有一件事,也許這是一個線索。我使用此代碼的applicationDidFinishLaunching過程中加載子視圖:
self.oDPVC = [[DownloadProgressViewController alloc] initWithNibName:@"DownloadProgressViewController" bundle:nil];
[window addSubview:self.oDPVC.view];
在XIB文件(我在兩個界面生成器和在文本編輯器已審查)進度條寬280個像素。但是當視圖打開時,它已經調整到了一半的寬度。另外,該視圖的背景圖像是default.png。它不是直接出現在默認圖像上,而是大約10個像素,在屏幕底部留下一個白色條。
也許這是一個單獨的問題,也許不是。
我很感謝您對雙保留的評論。我可以站在這個主題上了解更多。 self.oDPVC不是零,因爲我成功地將其子視圖添加到窗口。 self.oDPVC.oProgress不是零,因爲我能夠檢查其寬度如下: CGRect newFrame = self.oDPVC.oProgress.frame; NSLog(@「Progress width:%f」,newFrame.size.width); 最後,除以零不是問題,因爲我的分母是預期的總字節數,並且永遠不會爲零。 – 2010-03-26 12:26:05
我應該補充一點,當我測試oProgress的寬度時,它是160,而不是它在IB中設置的280。關於進度條的更多線索:有些人報告說,進度條保持爲零,並在任何任務結束時跳至100。我的永遠不會從零變爲零。 – 2010-03-26 12:29:54
解決所有問題。 default.png在它下面有空格,因爲在IB中它被調整爲爲狀態欄留出空間,我不知道它。進度條的大小錯誤,因爲不知何故,我在viewDidLoad中有一些代碼正在啓動另一個UIProgressView或重新啓動現有的代碼。刪除那行代碼會導致進度條成爲預期的大小,現在加上它的更新,我不需要與線程混在一起。道德:你總是在最後看到的地方找到你想要的東西! – 2010-03-27 03:37:51