我正在使用最新的 SDK 开发 iOS 5.0+ 应用程序。
这是我用来异步加载图像的代码UITableViewCell
。
- (UITableViewCell*)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ((groups != nil) && (groups.count > 0))
{
GroupCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[GroupCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
// Configure the cell...
Group* group = [groups objectAtIndex:indexPath.row];
cell.GroupNameLabel.text = group.Name;
// TODO: Poner el estado.
if (group.Photo)
cell.GroupImageView.image = group.Photo;
else
{
// download the photo asynchronously
NSString *urlString =
[NSString stringWithFormat:kGetGroupImageURL, [group.GroupId intValue]];
NSURL *url = [NSURL URLWithString:urlString];
[ImageTool downloadImageWithURL:url completionBlock:^(BOOL succeeded, UIImage *image) {
if (succeeded)
{
// change the image in the cell
cell.GroupImageView.image = image;
// cache the image for use later (when scrolling up)
group.Photo = image;
}
}];
}
return cell;
}
else
return nil;
}
和装载机:
#import "ImageTool.h"
@implementation ImageTool
+ (void)downloadImageWithURL:(NSURL *)url
completionBlock:(void (^)(BOOL succeeded, UIImage *image))completionBlock
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if ( !error )
{
UIImage *image = [[UIImage alloc] initWithData:data];
completionBlock(YES,image);
} else{
completionBlock(NO,nil);
}
}];
}
但它似乎不起作用,因为我不处理我正在为其加载图像的单元格是否仍然可见。
如果单元格仍然可见,我该如何处理?
我找到了这篇文章,但我不知道如何实现它。