2012-07-10 67 views
0

我正在使用NSURLConnection來下載文件。我在我的視圖中有一個UILabel,它必須顯示當前正在下載的文件。 UILabel在開始和結束時得到更新。可以說我下載了10個文件。我可以在開始下載之前和完成下載之後設置標籤文本。下載文件時立即更新ULabel

我可以理解,而我試圖打電話是不是在主線程中運行的方法,

所以我用下面的代碼,使其在主線程中運行,

[_myHome performSelectorOnMainThread:@selector(updateLabel) withObject:nil waitUntilDone:YES]; 

和方法是

- (void) updateLabel 
{ 
     _fileName.text =[NSString stringWithFormat:@"%@",fileName]; 
} 

這似乎也不起作用。我在這裏做錯了什麼?

誰能告訴我如何更新標籤馬上?

+0

看起來沒問題 - waituntildone可以是NO,如果不是_filename.text = fileName。當這樣的事情不起作用時,第一步應該是使用NSLog()/ breakpoints來檢查實際調用的方法。你做到了嗎? – ChrisH 2012-07-10 10:33:39

+0

是的。我用過NSLog。我的問題中沒有這些線。實際上updateLabel方法正在被調用。但標籤沒有更新。 – Perseus 2012-07-10 10:35:58

+0

'fileName'檢查'fileName'是否不是空字符串。 – 2012-07-10 10:39:23

回答

0

解決:我用NSNotificationCenter發送通知給其他類,它會立即更新標籤。我試着用performSelectorOnMainThread,即使updateProgress,performSelectorOnMainThread都在同一個類中。

爲什麼它沒有解決的任何原因,是最受歡迎的。

-1
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    //update your label 
} 
+0

糟糕。這是不同的課程。無論如何,即使我嘗試在此代理方法中更新我的標籤,它也不起作用。因爲didReceiveData仍然在主線程中運行。 – Perseus 2012-07-10 10:41:06

+0

只能用上面指定的方法控制下載的進度。如果該方法在另一個類中,請實現該類的委託,以便didReceiveData:將消息發送到當前類,然後嘗試更新主線程上的標籤。 – 2012-07-10 10:47:43

+0

下載文件工作正常。而FYI,我們不應該調用didReceiveData中的方法,它將繼續接收數據。我們應該在connectionDidFinishLoading時調用方法。而且我正在嘗試在NSURLConnection的委託方法中更新UILabel。 – Perseus 2012-07-10 10:51:12