1

私は Objective-C でダウンロード マネージャーを作成しており、再開機能を使用しています。何らかの理由でダウンロードが中断された場合に、中断したところから再開できるように、受信したデータをディスクに書き込みます。Apple は、1 つまたは複数の- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)responseイベントを予期する必要があると述べています。この場合、ダウンロードがリダイレクトされ、既に受信したバイトが無効であるため、以前に受信したデータをリセットする必要があるとのことです。そのため、既存のファイルを削除し、0 バイトで再作成します。しかし、このイベントを複数回受信すると、以前に部分ダウンロードの形式で受信したデータを削除する必要があり、再開機能の目的が無効になります。これに対する解決策はありますか?

私が思いついた解決策は- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response、最初に受け取ったイベントのデータのみをリセットすることです。これにより、ほとんどのケースが修正されます(私はそう思います)。これは論理的に正しいでしょうか?より良い代替手段はありますか?ファイルのダウンロードで複数の- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)responseイベントが発生する可能性はどのくらいありますか?

4

3 に答える 3

2

私のお勧めは、この問題を既に解決した人からのライブラリを使用することです。私が使用しているのは ASIHttpRequest です。ここで見つけることができます

そのページで「再開」を検索します

于 2011-03-01T21:33:56.293 に答える
1

multipart/x-mixed-replaceサーバーがすでに提供しているものを別のものに置き換えたい場合に使用されます。これまでにダウンロードしたものをすべて削除することが唯一の賢明な選択肢です。サーバーが何かを破棄して代わりに何かを使用するように指示している場合、ダウンロードを再開することはできません。

ファイルのダウンロードで複数の - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response イベントが発生する可能性はどれくらいですか?

非常にありそうもない。これは、ダウンロード マネージャーが必要な用途ではなく、特定の種類のストリーミングでのみ使用されます。

于 2011-03-01T21:09:41.647 に答える
0

これは、必要な機能を備えた素晴らしくクリーンなライブラリです: https://github.com/Anviking/DownloadManager

于 2012-12-24T14:59:24.560 に答える