UITableView
一度に1つのアイテムのみを表示するページがあります。各アイテムはインターネットから取得した写真です。ブロックを使用して非同期で画像をダウンロードします:
- (void)downloadImageForPost:(GifPost *)p atIndex:(NSInteger)index
{
[APIDownloader imageForSource:p.src
completion:^(NSData *data, NSError *error) {
if (self.currentIndex != index)
return;
[self.tableView
reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index
inSection:0]]
withRowAnimation:UITableViewRowAnimationNone];
}];
}
問題は、ブロックの外側で変更されるif (self.currentIndex != index)
場所にあります。self.currentIndex
すべての画像に対してこの関数を呼び出すとしましょうself.currentIndex = 0
。実行時に保存されたように、別のインデックスにスクロールするとself.currentIndex
、if条件が機能しません。
ブロックが指定された変数をコピーするのを防ぐ方法はありますか?ない場合、適切な動作をするために何ができますか?
PS:私は何もしていませんdata
。この関数を呼び出して、キャッシュに入れています。