gpt4 book ai didi

ios - FetchedResultsController 和 GDC 之间对于从网络下载到表格 View 中的图像的冲突?

转载 作者:行者123 更新时间:2023-11-28 22:25:21 25 4
gpt4 key购买 nike

我尝试在 coredata 和 FetchedResultsController 的帮助下构建一个 TableView (来自 coredata 的信息是通过服务器的 API 获取的),表中的每个单元格都有一个 ImageView ,它从网络异步加载图像与 GCD(我也是在方法中尝试并使用 SDWebImage)
“tableView:tableView cellForRowAtIndexPath:indexPath”,当我再次请求更多记录时出现问题(例如,第一次我有 50 条记录,当我发出新请求并将其保存在核心数据中时,图像不再正确关联带有文章或在滚动时消失)我相信是因为 fetchedResultsController 的结果是按时间函数排序的。我的代码:

NewsFeed *singleFeed = [self.fetchedResultsController objectAtIndexPath:indexPath];
NLNewsFeedCell *cell = (NLNewsFeedCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NewsFeedCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
cell.lblTextContain.numberOfLines = 0;
}
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^(void) {
NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:singleFeed.urlPicture]];

UIImage* image = [[UIImage alloc] initWithData:imageData];
if (image) {
dispatch_async(dispatch_get_main_queue(), ^{
cell.imgPicture.image = image;
[cell setNeedsLayout];
});
}
});

任何建议,如何解决这个问题?谢谢,抱歉拼错了。

最佳答案

首先,检查重复使用的单元格:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"];

如果单元格是nil,则创建一个新单元格。如果不是 nil,则使用现有的。

其次,我建议您创建一个自定义单元格来处理图像的下载,并可以取消下载或忽略下载。

您的问题是由于单元格加载完成后下载完成造成的,有可能下载完成的单元格已经不可见了。

你可以使用 AFNetworking或任何其他支持下载取消的异步图像加载库,并且在自定义单元格的 -(void)prepareForReuse 方法(在单元格被重用之前调用)中,您可以取消旧的下载操作,因此当单元格加载后,它将使用上次下载操作的图像。

关于ios - FetchedResultsController 和 GDC 之间对于从网络下载到表格 View 中的图像的冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19160302/

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