zoukankan      html  css  js  c++  java
  • UITableView image gcd

     1 if (![[NSFileManager defaultManager] fileExistsAtPath:[path stringByAppendingPathComponent:@"image.png"]])
     2 {
     3     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,  0ul);
     4     dispatch_async(queue, ^{
     5         NSString *url=[pat stringByAppendingPathComponent:@"comments.txt"];
     6         NSString *u=[NSString stringWithContentsOfFile:url encoding:NSUTF8StringEncoding error:nil];
     7         NSURL *imageURL=[NSURL URLWithString:u];
     8         NSData *image=[NSData dataWithContentsOfURL:imageURL];
     9         [image writeToFile:[pat stringByAppendingPathComponent:@"image.png"] atomically:YES];
    10         dispatch_sync(dispatch_get_main_queue(), ^{
    11             UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
     cell.imageView.image=[UIImage imageWithContentsOfFile:[pat stringByAppendingPathComponent:@"image.png"]];
    12             cell.imageView.image=[UIImage imageWithContentsOfFile:[pat stringByAppendingPathComponent:@"image.png"]];
    13             [cell setNeedsLayout];
    14             NSLog(@"Download");
    15         });
    16     });
    17     cell.imageView.image=[UIImage imageNamed:@"placeholder"];
    18 }
    19 else
    20 {
    21     NSLog(@"cache");
    22     cell.imageView.image=[UIImage imageWithContentsOfFile:[pat stringByAppendingPathComponent:@"image.png"]];
    23 }

    Rather than capturing the cell you need to capture the index path, then get the cell back using:

    UITableViewCell*cell =[tableView cellForRowAtIndexPath:indexPath];

    That way, if the cell is now off screen you'll get nil back and the image won't be set on the wrong cell.

    The other thing you need to add after your dispatch_async() is a

    cell.imageView.image=somePlaceholderImage.

  • 相关阅读:
    SVN菜单说明
    Jabber Software:Jabber-NET、agsXMPP与Wilefire[转]
    nuget的使用总结
    SET QUOTED_IDENTIFIER ON
    SET ANSI_NULLS ON
    SQL Server性能杀手
    How to open .ccproj in VS2010?
    Bios里,把SATA Mode Selection改为AHCI无法启动
    [转]内嵌WORD/OFFICE的WINFORM程序——DSOFRAMER使用小结
    使用EF连接现有数据库
  • 原文地址:https://www.cnblogs.com/cokecoffe/p/2760820.html
Copyright © 2011-2022 走看看