itok's Lab

昔の開発ネタを記録として残してます

NSURLDownloadでダウンロード-1

ダウンロードクラス NSURLDownload を使ってみましょう。非同期に DL することを目的とした DL クラスとなります。非同期なんでその経過を知るために delegate を用いてメッセージのやり取りをするわけです。

では、まずオブジェクトの生成と DL の開始。

1: NSURLRequest* req = [[[NSURLRequest alloc] initWithURL:url] autorelease];
2: NSURLDownload* dl = [[NSURLDownload alloc] initWithRequest:req delegate:self];
3: [dl setDestination:localPath allowOverwrite:YES];

NSURLRequest (1) には HTTP のヘッダ情報などを設定できますが、その場合には NSMutableURLRequest を使います。で、DL オブジェクトの生成 (2) と同時に DL 処理がはじまってしまうようですが、DL先がわからなければ意味がないので、直後に指定 (3) してあげます。(これ以外にdelegate 内で指定する方法もありますがそれは別途)

さて、ものすごく大ざっぱに言って、大事な DL 完了を知るための delegate メソッドは2つほど。

// 正常終了時
-(void) downloadDidFinish:(NSURLDownload*)download
// 失敗時
-(void) download:(NSURLDownload*)download didFailWithError:(NSError*)error

基本的にはこれら delegate メソッドの中で DL オブジェクトの破棄を行います。また、DL 処理をキャンセルした場合にはこれらのメソッドは呼び出されませんので要注意。