setImageWithURLRequest加载成功但显示相同的图像

时间:2014-07-01 07:07:53

标签: ios objective-c afnetworking afnetworking-2

我在表格视图中有一个单元格(行)有一个图像,每当我需要更改图像时我都在调用:

-(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并非总是如此,但在后续调用中检索相同的图像时,它会在图像来自缓存时显示。

以下是我使用的图像(文件和位置)的链接:

course0_image.jpg

course1_image.jpg

course2_image.jpg

course3_image.jpg

更新

图像位于表格的行中,表格布局用于添加调整大小和按较大标签下推内容的功能。因此,第一行是标题图像,然后是标题,然后是日期,依此类推,它始终具有相同数量的单元格,每个单元格出现一次。在滑动时,我正在更改用于填充屏幕的数据。在此更改之前(使用表格)一切都很好,但更长的标题与日期重叠。在更改为表格布局之前,此问题不存在。当我将UIImageView放在桌子之外时,它会再次开始工作,所以我认为UITableViewUITableViewCell与它有关。

更新2

以下sample project (zip)显示了我面临的问题。

更新3

问题似乎是在自定义表格单元格中调用sizeToFit,然后在调用reloadRowsAtIndexPaths:withRowAnimation:的表格视图上触发调整大小请求,之后tableView:heightForRowAtIndexPath:执行此调用被注释出图像正在加载。

1 个答案:

答案 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]);
                                         //
                                     }
     ];