TableView与异步加载远程图像

时间:2012-11-06 18:15:50

标签: xcode uitableview asynchronous

我会解释我的问题,希望找到解决方案。我找了几周如何解决这个问题,但找不到怎么做,不想使用外部库或稀有类。

说明:

我有一个TableView从XML自动获取信息,XML将我解析并存储在MutableArray中的所有信息。

该数组解析我的所有XML标记,它正常工作。

要阅读标签我按照以下方式执行解析:

//使用此标签标题:

[[self.parseResults objectAtIndex:indexPath.row] objectForKey:@" name_category_ads"];

//要使用此图片代码:

[[self.parseResults objectAtIndex:indexPath.row] objectForKey:@" image1_category_ads"];

问题:

TableView文本正确加载我的数组(标题),但是我无法在tableview中加载我的数组中的图像:

我使用静态URL图像(网站上的图像)测试了我的代码,如果它工作但是异步加载但是当我尝试从我的数组中执行它时它不起作用,它具有不同的图像URL。

//图片网址静态

的示例
NSString *imagenURL=@"http://www.principadoasturias.net/2011/pablo/03_php/archivos/iconos/jpg.jpg";

我的表格代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

//My custom cell

Cell_Category_Iphone *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
    cell = [[Cell_Category_Iphone alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:CellIdentifier];
}

//Image Static URL
NSString *imagenURL=@"http://www.principadoasturias.net/2011/pablo/03_php/archivos/iconos/jpg.jpg";

//Assign the title to my cell, using my array already loaded and parsed.

cell.titleCategoryCell.text=[[self.parseResults objectAtIndex:indexPath.row] objectForKey:@"name_category_ads"];

//Asynchronous loading of image

if (!cell.imageCategoryCell.image) {

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{

NSData *data =[NSData dataWithContentsOfURL:[NSURL URLWithString:imagenURL]];

dispatch_sync(dispatch_get_main_queue(), ^{
        UIImage *thumbnail = [UIImage imageWithData:data];
        cell.imageCategoryCell.image=thumbnail;
        [self.tableView beginUpdates];
        [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationNone];
        [self.tableView endUpdates];
    });
});
}

return cell;
}

解决问题,包括:

代码正确地加载了图像,所以asicronica,但是在URL中的单个图像,但我不能加载我的数组中的图像。

//我的阵列图像

[[self.parseResults objectAtIndex: indexPath.row] objectForKey: @ "image1_category_ads"];
你能帮帮我吗?然后为每个人分享代码。 非常感谢

关于里卡多

3 个答案:

答案 0 :(得分:2)

当您使用AFNetworking library时,有一个非常好的实现。它是UIImageView的扩展,它为您处理异步加载。你只需要设置URL,这就是1-liner。看看UIImageView+AFNetworking at GitHub

如果您不想使用AFNetworking库,则可能需要have a look at this sample。这是非常基本的,也是一样的,但只是一个简单的类。

答案 1 :(得分:0)

设法解决问题。我所做的是验证和消除图像阵列,空白区域和换行符,它完美地工作。 问候 里卡多

答案 2 :(得分:0)

以下是您的需求:

https://github.com/toptierlabs/ImageCacheResize

从URL中提取,缓存和加载远程图像。还支持转换。