gpt4 book ai didi

iOS - 异步下载图像并将它们与核心数据一起使用

转载 作者:行者123 更新时间:2023-11-29 03:04:41 26 4
gpt4 key购买 nike

在我的核心数据模型中,我有一个保存图像 URL 的实体。我想下载这些图像,以便在我的 UICollectionView 模型中使用它们,该模型是我的核心数据实体的数组。我希望始终能够同步访问这些图像(假设它们已经被异步下载),因此它们在各自的单元格中加载之间没有延迟。

目前,我在 UICollectionViewcellForIndexPath: 数据源委托(delegate)方法中使用异步方法,但是当重新加载 Collection View 时,如果仍有图像下载后,它们会被分配到错误的单元格,因为在此期间插入了单元格。

这个问题看起来应该很容易解决,但我无法解决。

非常感谢任何想法。

谢谢。

最佳答案

您可以在viewDidLoad中异步下载图像,并将它们添加到NSMUtableArray中,如下所示

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

for (int i = 0; i < carPhotos.count; i++) {

NSURL *photoURL = [NSURL URLWithString:carPhotos[i]];
NSData *photoData = [NSData dataWithContentsOfURL:photoURL];
UIImage *image = [UIImage imageWithData:photoData];
[carImages addObject:image];

dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});

}

});

然后检查 cellForRowAtIndexpath 以确保 indexPath 与 arrayIndex 匹配,如果要为未加载的图像加载虚拟图像,如下所示:

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

{ static NSString *CellIdentifier = @"Cell"; CarsAppCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; cell.carMakeLabel.text = carMakes[indexPath.row]; cell.carModelLabel.text = carModels[indexPath.row];

if (carImages.count > indexPath.row) {
cell.carImage.image = carImages[indexPath.row];
} else {
cell.carImage.image = [UIImage imageNamed:@"dummy.png"];
}

return cell;

}

希望对你有帮助....

关于iOS - 异步下载图像并将它们与核心数据一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22917036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com