现在我有一个带图像和标签的自定义单元格。后来我通过以下方式打印这些单元格:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:customCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! customCell
var url = NSURL(string: postCover[indexPath.row])
if let data = NSData(contentsOfURL: url!) {
cell.cellImage.image = UIImage(data: data)
}
var title = postTitle[indexPath.row]
cell.cellLabel.text = title
let indexPath = tableView.indexPathForSelectedRow()
return cell
}
当我打开一个应用程序并滚动它冻结。我该如何修复这个错误?
我读过它,我必须在tableView中使用异步图像加载,但是我不是已经加载它们了吗?
我搜索并考虑了4-5天而没有任何事情。有人可以给我一些提示吗?
答案 0 :(得分:2)
您可以使用GCD as-
为每个单元格异步下载图像func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:customCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! customCell
var url = NSURL(string: postCover[indexPath.row])
cell.imageView.image = nil;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^(void) {
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:parsedData[@"imageLR"]];
UIImage* image = [[UIImage alloc] initWithData:imageData];
if (image) {
dispatch_async(dispatch_get_main_queue(), ^{
if (cell.tag == indexPath.row) {
cell.imageView.image = image;
[cell setNeedsLayout];
}
});
}
});
return cell
}
对于Swift你可以这样做
if let data = self.cache.objectForKey(urlString) as? NSData {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)) {
let image = UIImage(data: data)
dispatch_async(dispatch_get_main_queue()) {
cell.imageView.image = image;
}
}
答案 1 :(得分:2)
您可以在gitHub上使用第三部分库SDWebImage。它基于Objective-C,还有另一个基于Swift的库Kingfisher。也许这就是你想要的。
答案 2 :(得分:0)
在swift.Import AFNetworking头文件中创建桥接头文件
然后找到这些方法setImageWithURLRequest
cell.imageView.setImageWithURLRequest
您可以通过这种方式致电