非同期イメージのダウンロード

次のコードは cellForRowAtIndexPath の範囲内にあります。このコードを編集する必要があります。

1.)画像をダウンロードする際に問題があった場合、このブロックは setFailedBlock ブロックを返します。どのようにコードに追加できますか?

2.)画像がダウンロードされている間にユーザーがビューを変更したら、このコードの実行を停止したい(ダウンロードを停止する)。私は viewdiddissapear メソッドまたは viewwilldissapear メソッドでブロックをキャンセルする必要があると思います。しかし、私はダウンロードをキャンセルするコードを書く方法を知らない。誰かが私にこれを行う方法を教えてもらえますか?

(注:このブロックは cellForRowAtIndexPath メソッド内にあり、 viewdiddissapear または viewwilldissapear からアクセスする必要があります)

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//this will start the image loading in bg
dispatch_async(concurrentQueue, ^{        
    NSData *someimageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:someimageURL]];        
    dispatch_async(dispatch_get_main_queue(), ^{
       [cell.imageviewofsomeimage setImage:[UIImage imageWithData:someimageData ] ];
    });
});
0

1 答え

if you use NSURLConnection, this class has cancel

AsyncURLConnectionディスカッション

1
追加された
自己でブロックする方法はありませんか? setFailedBlock を設定するのと同じですか?
追加された 著者 Illep,
@JeremyPさて、それを行う正しい方法は何ですか?適切な回避策
追加された 著者 Illep,
私は ASIRequest も使用していますので、 ASIRequest を使用してそれを行う方法はありますか?
追加された 著者 Illep,
@Illep:ブロックは魔法の弾丸ではありません。適切な場所で使用してください。一見、これは適切な場所のようには見えません。なぜなら、ブロックに優しい方法はキャンセルできないからです。
追加された 著者 JeremyP,
@Illep:ダウンロードをキャンセルできるようにするには、 NSURLConnection のインスタンスを作成し、デリゲートを設定し、デリゲートメソッドを実装する必要があるようです。 developer.apple.com/library/mac/documentation/Cocoa/Conceptu‌ al /…
追加された 著者 JeremyP,