我有一个UITableView
用缩略图填充它的单元格。就我而言,缩略图是从服务器下载的。我的代码如下:
if (![self thumbnailExists])
{
self.thumbnailImageView.image = nil;
[self.activityIndicatorView startAnimating];
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:
^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:self.thumbnailURL]];
UIImage *image = [UIImage imageWithData:data];
[[NSOperationQueue mainQueue] addOperationWithBlock:
^{
SubmenuScrollViewTableViewCell *submenuScrollViewTableViewCell = (SubmenuScrollViewTableViewCell*)[(UITableView*)self.superview cellForRowAtIndexPath:self.indexPath];
[submenuScrollViewTableViewCell.activityIndicatorView stopAnimating];
submenuScrollViewTableViewCell.thumbnailImageView.image = image;
}];
}];
[self.operationQueue addOperation:operation];
[self.operationQueues setObject:operation forKey:[self title]];
}
此代码基于 WWDC2012 的精彩演示:“Building Concurrent User Interfaces on iOS”。我的代码与演示文稿中的代码之间的主要区别在于,我正在使用从 Web 检索到的数据填充我的单元格。
它在大多数情况下都很好用,但我遇到的问题是,如果我滚动得非常快,那么其中一个单元格可能会显示错误的缩略图(通常我注意到所说的单元格将是其中的单元格的倍数缩略图属于)。我应该提到这段代码是在layoutSubviews
重写的方法中执行的UITableViewCell
。
任何人都可以发现此代码中的任何缺陷吗?