UITableViewCells的标签加载速度非常慢

时间:2016-12-15 22:09:40

标签: ios objective-c iphone uitableview dispatch

作为将手机同步到服务器的一部分,手机会从API获取数据以填充tableview。本地占位符图像立即出现,并异步替换为远程图像。问题是,每个行的标签最多都不会显示20秒,直到图像全部下载后,即使标签是常量。如何让标签更快加载?

-(void)configureCell:(IDItemCell *)cell withItem:(Items *)item {
    [cell layoutIfNeeded];
    //Label
   cell.nameLabel.text = @"TEST LABEL";//does not load for 20 seconds

//image
    NSString *picname = item.pic== nil ? @"" : item.pic;
    cell.iconView.image = [UIImage imageNamed:@"placeholder.png"];//loads instantly
 //remote fetch
    if (item.pic !=nil) {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString* path = [documentsDirectory stringByAppendingPathComponent:
                          [NSString stringWithString: picname] ];
        if ([[NSFileManager defaultManager] fileExistsAtPath:path])
        {  
            cell.iconView.image =[self loadImageNamed:picname];
        } 
        else { 
            NSString *picURL = [NSString stringWithFormat:@"https://www.~/pics/%@",picname];
            dispatch_async(kBgQueue, ^{ 
                NSData *imgData = [NSData dataWithContentsOfURL:[NSURL URLWithString:picURL]];
                if (imgData) { 
                    UIImage *imageFromWeb = [UIImage imageWithData:imgData];
                    if (imageFromWeb) { 
                        [self saveImage:imageFromWeb asPicName:picname];
                        dispatch_async(dispatch_get_main_queue(), ^{ 
                            cell.iconView.image = imageFromWeb;
                            [cell setNeedsDisplay];
                        }); 
                    } 

                } 
            }); 

        } 
    } 

    // Rounding the image view
    cell.iconView.layer.cornerRadius = cell.iconView.frame.size.width / 2;
    cell.iconView.clipsToBounds = YES;  
    cell.iconView.contentMode = UIViewContentModeScaleAspectFill;
}

0 个答案:

没有答案