2012-03-22 14 views
3

私はアプリ内ダウンロードでアプリを持っています。私は正常にこの方法でmp3ファイルをダウンロードします:ダウンロード中のプログレスバー

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

しかし、このコードが実行されている間、本当に大きな休止があります。ダウンロードの進行状況を確認し、進行状況バーに表示するにはどうすればよいですか?

+1

進行状況を表示するにはhttps://github.com/jdg/MBProgressHUDをご覧ください。 –

答えて

4

問題はdataWithContentsOfURL:がブロッキングコールであることです。これは、実行中のスレッドをブロックすることを意味します。

あなたはこれを修正するためのいくつかの選択肢を持っており、より良いものはおそらくNSURLConnectionを使用することです。

NSURLConnectionを使用すると、ダウンロードリクエストを非同期で実行できます。これにより、メインスレッドをブロックできなくなります。

ダウンロードの進行状況を通知し、データを保存し、成功または失敗を通知するには、NSURLConnectionDelegateの方法を使用する必要があります。

NSURL Loading Systemのドキュメントをお読みください。

NSURLConnectionを使用する代わりに、現在のコードをディスパッチキューを使用してGCDを呼び出してラップすることもできます。これにより、通話がUIをブロックするのを防ぐことができますが、進行状況を判断することはできません。そのためには、まだNSURLConnectionを使用する必要があります。

+0

ええ、私はブロックについて知っています。 NSURLConnection =のThnx) –

1

あなたが本当にASIHTTPRequest、特にthis section

を見ている必要がありますそれはあなたのダウンロードを追跡し、非同期および同期の接続、キュー、キャッシュと良いものがたくさんのためのコールバックを提供します。

+0

ページの上部に警告が表示されます。_私はこのライブラリで作業していないことに注意してください。新しいプロジェクトには何か他のものを使用することを検討してください。 :)_ –

+1

@TimBütheはい私はそれを見た! :P しかし、私はまだそれが素晴らしい図書館だと思っています。クラスのいくつかを気にする人は、自分でそれを維持するのは比較的簡単です。しかし、ねえ、それは私が推測する私の意見です:) – Alladinian

関連する問題