我在表格视图中有一个单元格(行)有一个图像,每当我需要更改图像时我都在调用:
-(void)loadThumbnailWithPath:(NSString *)path {
NSLog(@"loadThumbnailWithPath:%@",path);
UIImage* placeholder = [UIImage imageNamed:@"ic_courselist_placeholder.png"];
if (path == nil || [path length] == 0) {
//default
[self.imageHeader setImage:placeholder];
return;
}
//load
NSURL* url = [NSURL URLWithString:path];
NSURLRequest* request = [NSURLRequest requestWithURL:url];
__weak CSImageCell* weakComponent = self;
//
[self.imageHeader setImageWithURLRequest:request
placeholderImage:placeholder
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){
//
NSLog(@"-OK-\nrequest=%@\nresponse=%@",request,response);
weakComponent.imageHeader.image = image;
[weakComponent setNeedsLayout];
//
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
//
//TODO: ERror logging
NSLog(@"Failed to load image:\nrequest=%@\nresponse=%@\nerror=%@",request,response,[error description]);
//
}
];
}
我在屏幕加载时向左/向右滑动,问题是它停止工作,它加载图像(总是图像不是占位符)并保持相同的图像。日志显示新图像的成功和URL,但显示相同。
成功的日志也始终为请求和响应返回null - 如果这很重要。 更新: null并非总是如此,但在后续调用中检索相同的图像时,它会在图像来自缓存时显示。
以下是我使用的图像(文件和位置)的链接:
更新
图像位于表格的行中,表格布局用于添加调整大小和按较大标签下推内容的功能。因此,第一行是标题图像,然后是标题,然后是日期,依此类推,它始终具有相同数量的单元格,每个单元格出现一次。在滑动时,我正在更改用于填充屏幕的数据。在此更改之前(使用表格)一切都很好,但更长的标题与日期重叠。在更改为表格布局之前,此问题不存在。当我将UIImageView
放在桌子之外时,它会再次开始工作,所以我认为UITableView
或UITableViewCell
与它有关。
更新2
以下sample project (zip)显示了我面临的问题。
更新3
问题似乎是在自定义表格单元格中调用sizeToFit
,然后在调用reloadRowsAtIndexPaths:withRowAnimation:
的表格视图上触发调整大小请求,之后tableView:heightForRowAtIndexPath:
执行此调用被注释出图像正在加载。
答案 0 :(得分:1)
您需要返回主线程才能修改与UI相关的内容。
[self.imageHeader setImageWithURLRequest:request
placeholderImage:placeholder
success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){
//
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"-OK-\nrequest=%@\nresponse=%@",request,response);
weakComponent.imageHeader.image = image;
[weakComponent setNeedsLayout];
//
});
}
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
//
//TODO: ERror logging
NSLog(@"Failed to load image:\nrequest=%@\nresponse=%@\nerror=%@",request,response,[error description]);
//
}
];