2016-09-11 35 views
2

コレクションビューのセルを使用したときに既に送信されているリクエストを取り消すのに苦労しています。(同じリクエストを既に送信しているのでリクエストをキャンセルしたい場合は...) CancelRequestForRequestReceiptメソッドを使用する必要があると推測します。問題は、このRequestReceiptを取得する方法が明確でないことです。AlamofireImageで画像のダウンロードをキャンセルする

例:私は戻ってスクロールして、高速転送する場合

我々は、...(各画像は別のURLを持っている)af_cancelImageRequestが仕事をすると、アクティブ2を作成しません方法を異なるイメージを持つコレクションビューを持っていますスーパー!、問題は、私たちが1つの方向にスクロールしようとしたときに、1000個の画像があるということです。基本的に、画像が返される前に、送信したリクエストをキャンセルできるようにしたい私たちはイメージを持っておらず、AlamofireImageはそのリクエストを続行しません...セルが消えた後(ゆっくりとしたインターネットとフェストのスクロールによって).. 私はそれが正しいとすれば、cancelRequestForRequestReceipt ...問題は、このRequesを取得する方法を見つけることができないことですtReceiptは...

ところで:私は、サンプルコードそのAlamofireImageデモアプリ、

override func prepareForReuse() { 
    super.prepareForReuse() 

    imageView.af_cancelImageRequest() 
    imageView.layer.removeAllAnimations() 
    imageView.image = nil 
} 

を見て、私が言ったように、このコードは、要求が操作キューにすでにされている場合にのみ、画像のための要求をキャンセルします。..

ヘルプ:)

答えて

1

私はあなたが誤解していると思うがAlamofireImageは、この例ではやっているだったが、最初のはprepareForReuse方法を何をするかを理解しましょう。

セルと呼ばれるこの方法をデキューしようとしているたびに、これはあなたが言ったように、たとえばあなたが前後にスクロール場合はNで速い一つの方向にスクロールする場合は、高速、このメソッドは、呼び出されることを意味し

このメソッドは、セルが消えるたびに呼び出されます。

UIImageViewでメソッドを呼び出しているため、UITableViewCell内に参照が存在するため、リクエストはキャンセルされるため、RequestReceiptは必要ありません。

このような振る舞いを防止するために、スロットルをした後に早送りや巻き戻しをするとキャンセルされません。

AlamofireImageは、それは本当に素晴らしいライブラリだが、私はあなたがデキューされ、それはあなたのために早送りやセルの他の場合、後方そしてもちろんの場合はthrotleを扱うKingFisherを使用してより多くの利益をもたらすことができると思いますし、リクエストは完了していません。

しかし、このライブラリはあなたのためにすべてのハードワークを処理し、ホイールを再発明する必要はありません。私のアドバイスは、舞台裏で何が起こっているのか、これらのライブラリがまだ存在しない場合にはどうするのかを学びます。

私はこれがあなたに役立つことを願っています。

+0

ありがとう@Victor Sigler!私はKingFisherをチェックします:) – Sosily

+0

@Victor Sigler、KingFisherの "調整"を担当するドキュメント(またはより良いソースファイル)を指してください。 – kean

関連する問題