[objective-c]重装 UItableViewCell 后的缩略图图像下载

发布时间: 2016/10/2 19:25:35
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

在 tableViewCell 下载图像内和比套在其中有一个应用程序作为缩略图。我的问题是,我可以看到缩略图图像刷新是如果点击了另一个选项卡,和比回到举行了 tableViewCell 选项卡的唯一途径。下面是设置缩略图的代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    PFObject *message = [self.messages objectAtIndex:indexPath.row];
    cell.textLabel.text = [message objectForKey:@"username"];
    cell.imageView.image = [UIImage imageNamed:@"Treehouse.png"];
    PFFile *thumbnail = nil;

   if (thumbnailArray.count > 0){
    thumbnail = [[thumbnailArray objectAtIndex:indexPath.row] objectForKey:@"imageFile"];
   dispatch_async(backgroundQueue, ^{

           NSURL *thumbnailURL = [[NSURL alloc]initWithString:thumbnail.url];
           NSData *thumbnailData = [NSData dataWithContentsOfURL:thumbnailURL];

          [[cell imageView]setImage:[UIImage imageWithData:thumbnailData]];
       [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];


   });
   }


    return cell;
}

解决方法 1:

问题是.,

  1. 加载该单元格。
  2. 被解雇的映像下载文件。
  3. 图像下载后,单元格是重新加载。
  4. 再一次下载的图像。
  5. 有是没有缓存的图像或逻辑以加载图像

声明 NSMutableDictionary @property (strong) NSMutableDictionary *imagesDictionary; 和实例化它self.imagesDictionary = [NSMutableDictionary dictionary];

在单元格中为行在索引路径,检查缓存中存在然后再下载它。

PFFile *thumbnail = nil;

if (thumbnailArray.count > 0)
{
 //If image is present in cache load from cache
UIImage *image = [self.imagesDictionary objectForKey:indexPath];
if (image)
{
    [cell.imageView setImage:image];
}
else
{
    //If Image is not present fire a download
     thumbnail = [[thumbnailArray objectAtIndex:indexPath.row] objectForKey:@"imageFile"];
     dispatch_async(backgroundQueue, ^{

        NSURL *thumbnailURL = [[NSURL alloc]initWithString:thumbnail.url];
        NSData *thumbnailData = [NSData dataWithContentsOfURL:thumbnailURL];

         //Cahce it to your image dictionary
        [self.imagesDictionary setObject:[UIImage imageWithData:thumbnailData] forKey:indexPath];
         //Reload the dictionary
        [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];


    });


}
赞助商