2012-02-12 7 views
3

私はCocoaで簡単なダウンロードマネージャを書いています。実際にはNSURLDownloadを使ってこのトリックを行います。問題は、NSURLDownloadが1つのセグメントからファイルをダウンロードしていると思います。ダウンロードパフォーマンスを向上させるために、他のダウンロードマネージャが多くのセグメントのファイルをダウンロードしていることがわかりました。Cocoa APIを使用してダウンロードを加速するには

実際、私はダウンロードしたいファイルを複数のセグメントに分割し、同時にこれらのセグメントをすべてダウンロードする必要があると思います。

問題は、私がそれを行う方法を知らないということです。私はすでに何も成功せずにインターネットでたくさん検索します。


編集:ここでは実用的なソリューションがあるおかげnacho4dヘルプ:

NSURL *downloadURL = [NSURL URLWithString:@"http://www.urltodownload.com"]; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:downloadURL cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 1000.0]; 
int fromByte = 0; 
int toByte = 1000; 
NSString *range = [NSString stringWithFormat:@"bytes=%i-%i", fromByte, toByte]; 
[request setValue:range forHTTPHeaderField:@"Range"]; 
[[NSURLDownload alloc] initWithRequest:request delegate:self]; 

答えて

1

私はこのために正確な答えを知らないが、あなたはこのJava exampleで見れば、あなたが追加することができます表示されますダウンロードするパートを選択することでHTTPConnectionオブジェクト内の「レンジ」プロパティ:

// Specify what portion of file to download. 
connection.setRequestProperty("Range", 
     "bytes=" + downloaded + "-"); 

私はなど、それがヒントであり、多分NSURLRequestまたはNSURLConnection中の場所があると思いますこの「Range」プロパティを設定するには:

と仮定すると、すべての接続が完了すると同時にn個の接続を行い、すべてをまとめなければならないと思います。

あなたが正確な答えを見つけた場合、私はあまりにも:)

を知って喜んでいるだろう、それがお役に立てば幸いです。

+0

ありがとうございました。実際には、範囲をNSMutableURLRequestオブジェクトで指定することは可能です。ここに小さな例があります: 'NSURL * downloadURL = [NSURL URLWithString:@" http://www.urltodownload.com "]; NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:downloadURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:1000.0]; int fromByte = 0; int toByte = 1000; NSString * range = [NSString stringWithFormat:@ "bytes =%i-%i"、fromByte、toByte];; [setValueを要求してください:HTTPHeaderFieldの範囲:@ "Range"]; [[NSURLDownload alloc] initWithRequest:デリゲートを要求する:self]; ' –

+1

これで動作します。ありがとうございました。私はあなたのために別の質問をしていますが、同じ時間にn個のスレッドでファイルを書き込む最良の方法は何と思いますか? –

+1

いくつかのオプションがありますが、最も簡単なのは、forループを使用してすべてのNSURLDownloadsを開始し、すべての代理人がNSDataを使用してすべてのパーツをまとめたと言ったときです。 (私は思うすべてをまとめる最良の方法があるはずです:)。 – nacho4d

関連する問題