gpt4 book ai didi

ios - 为什么刷新某些行后 TableView 单元格会困惑?

转载 作者:行者123 更新时间:2023-11-29 03:55:19 25 4
gpt4 key购买 nike

我正在使用 UITableView 列出来自 Internet 的一些图像。所以我使用AFNetworking的 setImageWithURLRequest:placeholderImage:success:failure:方法,当下载图像时,我需要做一些处理然后显示。为了刷新处理后的图像,我使用

[wTableView beginUpdates];
[wTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationNone];
[wTableView endUpdates];

在成功 block 中。看起来这在第一次加载时有效,但是当我滚动表格 View 时,行被弄乱了,还有一行消失了,并且它很容易在 [wTableView endUpdates]; 方法中崩溃。这个方法有什么问题吗?相关代码片段如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *tableIdentifier = @"cell";

CouponTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableIdentifier];

if (!cell) {
cell = [[CouponTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableIdentifier];
}
[cell prepareForReuse];

NSArray *coupons = [mCoupons objectAtIndex:indexPath.section];
CouponDB *couponDB = [coupons objectAtIndex:indexPath.row];
NSString *thumbLink;
if (couponDB) {
[cell.textLabel setText:couponDB.couponInfo.company];
[cell.textLabel setFont:[UIFont boldSystemFontOfSize:CELL_LABEL_FONT_SIZE]];
[cell.textLabel setTextColor:[UIColor grayColor]];
[cell.textLabel setBackgroundColor:[UIColor clearColor]];
[cell.detailTextLabel setText:[NSString stringWithFormat:@"Expires:%@",couponDB.couponInfo.deadline]];
[cell.detailTextLabel setBackgroundColor:[UIColor clearColor]];
thumbLink = [self thumbLink:couponDB.couponInfo.imgURL];
[cell setNeedsLayout];

if (couponDB.redeem_status) {
UIImageView * __weak imageView = cell.imageView;
CouponTableController * __weak table = self;
UITableView *__weak wTableView = mTableView;
[cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:thumbLink]] placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
imageView.image = [table crossedImage:image];
@synchronized(wTableView){
[wTableView beginUpdates];
[wTableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationNone];
[wTableView endUpdates];
}

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
NSLog(@"cell imageview load error:%@",error);
}];
} else {
[cell.imageView setImageWithURL:[NSURL URLWithString:thumbLink] placeholderImage:[UIImage imageNamed:@"default_cover.jpg"]];
}

}

if (![cell.backgroundView isKindOfClass:[CouponTableCellBackgroud class]]) {
cell.backgroundView = [[CouponTableCellBackgroud alloc] init];
}

return cell;
}

第一次加载表格(无滚动)是这样的: enter image description here

当您向下和向上滚动时,表格行会变得困惑,如下所示: enter image description here

如有任何建议,我们将不胜感激。

最佳答案

试试这个,而不是重新加载单元格。声明一个指向单元格的弱指针

__weak UITableViewCell *weakCell = cell; 
[cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:thumbLink]] placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
weakCell.imageView.image = [table crossedImage:image];
[weakCell setNeedsLayout];

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
NSLog(@"cell imageview load error:%@",error);
}];

关于ios - 为什么刷新某些行后 TableView 单元格会困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16578633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com