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 上的
如果你不想使用 AFNetworking 库,你可能想看看这个示例。它是非常基本的并且做同样的事情,但只是一个简单的类。
这是你需要的:
https://github.com/toptierlabs/ImageCacheResize.
它从 URL 获取、缓存、加载远程图像。还支持转换。
设法解决问题。我所做的是验证并消除图像数组、空白和换行符,它工作得很好。
问候
里卡多