2010-11-09 92 views
0

我知道存在很多類似的問題,但沒有一個答案似乎解決了我的問題。我有一個應用程序使用NSURLConnection來下載文件,然後對下載的文件進行一些計算。我設置了一個UILabel來顯示當前的加載狀態(例如:「加載文件」,「解析文件」)。我更新NSURLConnection委託的didReceiveResponse和connectionDidFinishLoading函數中的UILabel,以及我的代碼中的一些其他地方。我通過調用下面的函數對其進行更新:iPhone UILabel沒有更新

[self performSelectorOnMainThread:@selector(updateProgress) withObject:nil waitUntilDone:NO] 

其中 - (無效)的UpdateProgress是我定義調用[theLabel setNeedsDisplay]的函數。我NSLog'd它,就像

NSLog(@"theLabel: %@\n",theLabel.text); 

和信息更新正確,但標籤實際上並沒有在視圖中更新。此外,updateProgress僅在加載完所有內容後調用。它更新標籤THEN,這是沒有用的。有什麼建議麼?

回答

2

NSURLConnection正在阻塞主線程(在視圖上將不會執行任何更新,直到它完成)。

您可以在後臺執行updateProgress

[self performSelectorInBackground:@selector(updateProgress) withObject:nil] 

updateProgress第一行應該是:

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc]init]; 

最後幾行應該是:

[pool release]; 
pool = nil; 

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html

當然,你也可以在後臺執行NSURLConnection。然後你可以更新主線程上的標籤。

+0

謝謝,現在工作完美! – Mike 2010-11-09 15:56:08