使用iOS的UITableView,如果在将图像下载到单元格之前单元格已经出列,该怎么办?

时间:2012-09-05 00:41:47

标签: ios uitableview asihttprequest sdwebimage

无论使用何种方法:iOS 5的[NSURLConnection sendAsynchronousRequest]SDWebImageASIHTTPRequest,如果在下载图像时,单元格已经出列(当{{ 1}}被调用)因此,新标签现在可以标记为“玛丽”,而正在下载彼得的图像,下载完成后,彼得的图像将填充到玛丽的框中。

如果玛丽的形象随后也被下载并将进入玛丽的牢房并掩盖彼得的照片会更好,但如果

1)玛丽的照片需要1或2秒才能下载(手机无线网络速度慢或延迟),或网络只是在那时窒息?然后,彼得的照片将在玛丽名称旁边显示1或2秒或20秒,如果网络请求此次失败,则甚至永远显示。

2)如果Mary的数据隐私设置为“不显示我的照片”标志或其他内容,那将是最糟糕的,然后dequeueReusableCellWithIdentifier可能实际上将虚拟图像(虚拟化身)设置为Mary的{{1}下载Peter的图像后,进入Mary的单元格,永远不会被替换。

这可以优雅地处理或解决吗?

顺便说一句,如果我们使用cellForRowAtIndexPathimageView,问题会在那里出现,还是会由班级处理?

1 个答案:

答案 0 :(得分:2)

UITableViewCell method -prepareForReuse是一个很好的机会来取消未完成的网络请求,丢弃不需要的缓存,以及那种事情。

+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]没有直接提供取消请求的方法,但如果在开始请求之前设置了某个属性或ivar,然后检查完​​成处理程序以确保其当前值与你期望,你可以得到类似的效果。