0

リモートからファイルをダウンロードしようとしていますが、すべてのファイルのダウンロードの成功ステータスを監視できるようになりました

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

しかし、ダウンロードのプロセス全体を監視する方法はありますか?すべてのダウンロードが終了したことをどのように知る必要がありますか?

そして、ダウンロードリクエストを開始してみました

[afhttpClient enqueueBatchOfHTTPRequestOperations:operationArray 
                                              progressBlock:progressBlock 
                                            completionBlock:completionBlock];

うまくいかないようですが、上記のコードと[operation start]をループに入れてダウンロードリクエストを開始することの違いは何ですか?

@mattt(これが見える場合)

4

3 に答える 3

2

おそらく、画像をダウンロードするために使用する URL オブジェクトの NSArray を持っているでしょう。必要なことは、URL オブジェクトの数に等しい整数値を作成することです。画像のダウンロードに成功するか、完全にダウンロードに失敗するたびに (たとえば、数回のタイムアウト後または 404 HTTP ステータス コードを受信したとき)、その整数をデクリメントする必要があります (ブロックは別の場所で実行されているため、これはアトミック プロパティであることに注意してください)。スレッド)。カウントがゼロになると、すべてのリクエストが終了します。また、その整数を使用してプログレス バーを更新したり、単に「#/15 個の画像がダウンロードされました」とユーザーに通知したりすることもできます。他に説明が必要な場合はお知らせください。

残念ながら、私は AFHTTPClient を使用したことがないため、2 つの操作の違いを正確に伝えることはできませんが、文脈上、最初の操作はすべての要求をほぼ同時に非同期で実行し、後者は連続的なアプローチを使用します。最初のものの完了時にのみ起動されます。

于 2012-04-09T11:58:26.713 に答える
0

ダウンロードされたバイト数と予想される合計バイト数で各操作の進行状況を一定に更新したい場合は、Peter Steinberger のAFDownloadRequestOperationを強くお勧めします。

このクラスは AFHTTPRequestOperation から派生progressiveDownloadProgressBlockし、操作キュー レベルでの操作完了ごとの進行状況ではなく、操作ごとの進行状況を追加します。これは、あなたが探していると思います。もう 1 つの大きな利点は、コアの AFNetworking 実装よりも、再開可能/部分的なダウンロードがはるかにアクセスしやすくなることです。

使い方は簡単です (GitHub プロジェクトの README.md の例):

[pdfRequest setProgressiveDownloadProgressBlock:^(NSInteger bytesRead,
            long long totalBytesRead, long long totalBytesExpected,
            long long totalBytesReadForFile, long long totalBytesExpectedToReadForFile)
{
    self.downloadProgress = totalBytesReadForFile/(float)totalBytesExpectedToReadForFile;
}];

私はこれをいくつかのエンタープライズ iOS プロジェクトで数ギガバイトのファイルをダウンロードするために使用していますが、AFNetworking の 1.0.1 リリースでうまく機能することがわかります。

お役に立てば幸いです…</p>

于 2012-12-20T16:20:59.483 に答える
0

NSOperationQueue を作成し、すべての AFHTTPRequestOperation をその中に入れることができます。KVOを使って「動作」を観察する。カウントがゼロになると、すべての操作が完了したと言えます。

于 2012-08-07T08:12:53.150 に答える