从URL中获取数据并将其显示在tableview中

时间:2014-06-20 15:27:57

标签: ios

在我的应用程序中,我必须从json webservice获取图像并在表格视图中显示它们。向下滚动时,所有图像的顺序都是正确的,但是当我向后恢复时,所有图像都相互重叠。我正在使用[tableview reloaddata]然后它正在发生。

1 个答案:

答案 0 :(得分:1)

在我的应用程序中发生了这种情况,我有一个排行榜表。这肯定是因为表被重用了。

解决此问题的最简单方法是先将单元格的图像设置为nil,然后下载并显示新图像。

肯定有其他方法可以做到这一点,但我绝对可以保证这个,因为我在我自己的应用程序中使用它,它的效果很棒!!

这是我如何解决问题。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * cellIdentifier = @"Cell";
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (!cell)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

    // Make sure you set the image for the cell to nil first
    [cell.imageView setImage:nil];

    // Then load your new image using the url and display it
    dispatch_queue_t backgroundQueue = dispatch_queue_create("com.example.imagedownloadqueue", NULL);
    dispatch_async(backgroundQueue, ^(void){
        NSUrl * url = [NSUrl UrlWithString:@"www.example.com"]; // Url of image to download
        UIImage * image = [UIImage imageWithData:[NSData dataWithContentsOfUrl:url]];
        if (image)
        {
            dispatch_async(dispatch_get_main_queue(), ^(void) {
                [cell.imageView setImage:image]; // Display image after it is downloaded
            });
        }
    });

    return cell;
}