4

AFNetworkingを使用して大きなファイルをiPadアプリにダウンロードしています。

AFHTTPRequestOperationのインスタンスは、このファイルをダウンロードするために使用されます。以下は参照用のコードです-

// requestは、ダウンロードされるファイルのNSRequestオブジェクトです
AFHTTPRequestOperation * operation = [self HTTPRequestOperationWithRequest:request
                                        成功:^(AFHTTPRequestOperation * operation、id responseObject){                                                                        

                                        }失敗:^(AFHTTPRequestOperation * operation、NSError * error){


                                        }];
//ここでパス変数はファイルがダウンロード時に配置される場所です
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path
                                                               追加:はい];
//このクラスはAFHTTPClientのサブクラスであるため、操作はリクエストキューに追加されます
[自己enqueueHTTPRequestOperation:operation];

ここでの問題は、以下の関数を使用してこのダウンロードを一時停止して再開しようとすると、pauseDownload関数は正しく機能しますが、再開ダウンロードが期待どおりに機能せず、ダウンロードが最初から開始されているように見えることです。それが去った場所から再開すること。ここで問題になる可能性がありますか?

-(void)pauseDownload {
    [操作一時停止];
}

-(void)resumeDownload {
   [操作再開];
}
4

1 に答える 1

6

しばらく過ごした後、ダウンロードを一時停止して再開する方法を見つけました。

AFNetworkingには拡張機能があります。そのうちの1つはAFDownloadRequestOperationで、これは基本的に大きなファイルの一時停止と再開を処理するために使用されます。したがって、ここではAFHTTPRequestOperationを使用する代わりに、AFDownloadRequestOperationを使用します。以下はサンプルコードです

// requestは、ダウンロードされるファイルのNSRequestオブジェクトであり、targetPathは、ダウンロードされたファイルの最終的な場所です。shouldResumeをYESに設定することを忘れないでください
AFDownloadRequestOperation * operation = [[AFDownloadRequestOperation alloc] initWithRequest:request
                                                                                     targetPath:targetPath
                                                                                   shouldResume:YES];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation * operation、id responseObject){
    //ハンドルの完成
    }失敗:^(AFHTTPRequestOperation * operation、NSError * error){
     //ハンドルの失敗
 }];
[操作setProgressiveDownloadProgressBlock:^(NSInteger bytesRead、long long totalBytesRead、long long totalBytesExpected、long long totalBytesReadForFile、long long totalBytesExpectedToReadForFile){
    //ハンドルの進行状況

}];
//このクラスはAFHTTPClientのサブクラスであるため、操作はリクエストキューに追加されます
[自己enqueueHTTPRequestOperation:operation];

//ダウンロードを一時停止するために使用
-(void)pauseDownload {
    [操作一時停止];
}
//ダウンロードを再開するために使用
-(void)resumeDownload {
   [操作再開];
}
于 2012-09-27T10:37:05.080 に答える