2012-02-06 23 views
0

次のコードは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 ] ]; 
    }); 
}); 

答えて

1

あなたはNSURLConnectionを使用している場合、このクラスはcancel

AsyncURLConnection discussion

+0

ISNが」持っていますそこにそれ自身をブロックする解決策があります。 'setFailedBlock'を設定するのと同じですか? – Illep

+0

@Ilelep:ブロックは魔法の弾丸ではありません。適切な場所で使用してください。一見、これは適切な場所のようには見えません。なぜなら、ブロックに優しい方法はキャンセルできないからです。 – JeremyP

+0

@JeremyPさて、それを行う正しい方法は何ですか?適切な回避策 – Illep

関連する問題