关于 xcode:TableView 异步加载远程图片

TableView with asynchronous load remote images

我会解释我的问题,我希望找到解决方案。我正在寻找几周的时间来解决这个问题,但找不到怎么做,不想使用外部库或稀有类。

解释:

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

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

要读取标签,我的解析器如下:

//要使用这个标签 Title:

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

//要使用这个图片标签:

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

问题:

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

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

//图片URL静态示例

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

我的表的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
- (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 中的单个图像,但我不能让它加载我数组中的图像。

//我的数组图片

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

你能帮帮我吗?然后把代码分享给大家。
非常感谢

问候里卡多


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

如果你不想使用 AFNetworking 库,你可能想看看这个示例。它是非常基本的并且做同样的事情,但只是一个简单的类。


这是你需要的:

https://github.com/toptierlabs/ImageCacheResize.

它从 URL 获取、缓存、加载远程图像。还支持转换。


设法解决问题。我所做的是验证并消除图像数组、空白和换行符,它工作得很好。
问候
里卡多