2012-03-22 164 views
3

我有一個應用程序下載的應用程序。我用這種方式成功下載了mp3文件:下載時的進度條

NSData *data1 = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://.../somefile.mp3"]]; 
[data1 writeToFile:filePath atomically:YES]; 

但是這段代碼執行時確實有很大的停頓。我如何計算下載的進度並用進度條顯示它?

+1

看看https://github.com/jdg/MBProgressHUD來顯示進度。 – 2012-03-22 11:22:50

回答

4

問題是dataWithContentsOfURL:是一個阻塞呼叫。這意味着它會阻塞正在運行的線程。

你有幾個選擇來解決這個問題,最好的可能是使用NSURLConnection

通過NSURLConnection可以異步執行下載請求,這將防止它阻止主線程。

您必須使用NSURLConnectionDelegate方法獲知下載進度,保存其數據並獲知成功或失敗的通知。

請閱讀NSURL Loading System的文檔。

使用NSURLConnection的替代方法是使用調度隊列對GCD進行一些調用來包裝當前代碼。這將阻止呼叫阻止您的用戶界面,但它不會讓您確定進度 - 因爲您仍然需要使用NSURLConnection

+0

是的,我知道阻止。 NSURLConnection的Thnx =) – 2012-03-22 11:03:32

1

你真的應該看看的ASIHTTPRequest,尤其是this section

它提供的回調跟蹤您的下載,異步和同步連接,隊列,緩存和大量的好東西。

+0

請注意頁面頂部的警告:_請注意,我不再在這個庫上工作 - 您可能要考慮爲新項目使用其他內容。 :)_ – 2012-03-22 10:59:57

+1

@TimBüthe是的,我剛看到它! :P 但我仍然認爲這是一個很好的圖書館,如果只關心某些類,那麼它自己就很容易維護它。但是,嘿,這是我的看法,我猜:) – Alladinian 2012-03-22 11:08:00