从 URL 加载 UITableViewCell 的图像(需要异步加载)

2024-04-03

我有一个自定义类,它可以解析 XML 并获取图像的 URL 字符串(我将其存储在数组中)。然后我想检索这些字符串来加载图像并将每个字符串显示在 UITableViewCell 中。这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    UILabel *labelText = (UILabel *)[cell viewWithTag:1000];
    labelText.text = [[self.listOfPlaceDetails objectAtIndex:indexPath.row] objectForKey:@"name"];

    NSURL *imageURL = [NSURL URLWithString:[[self.listOfPlaceDetails objectAtIndex:indexPath.row]objectForKey:@"imageCell"]];
    NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
    UIImage *image = [UIImage imageWithData:imageData];
    cell.imageView.image = image;

    return cell;
}

显然,当我向下滚动表格时,应用程序会加载更多图像,而当加载图像时,用户无法执行任何操作。该应用程序似乎冻结了。我要加载的图像不是很大(大约8kb)。也许有一种方法可以在后台加载和存储它们?我还想为用户提供更多自由,例如向下滚动并查看包含文本但不包含图像的单元格。然后强制应用加载用户当前正在查看的单元格的图像。

有没有办法修改我的代码或任何其他解决方案,以便从 URL 字符串正确加载图像?

任何建议将不胜感激,谢谢。


尝试异步加载图像,这样主线程就不会阻塞。

您的代码如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    UILabel *labelText = (UILabel *)[cell viewWithTag:1000];
    labelText.text = [[self.listOfPlaceDetails objectAtIndex:indexPath.row] objectForKey:@"name"];

    NSURL *imageURL = [NSURL URLWithString:[[self.listOfPlaceDetails objectAtIndex:indexPath.row]objectForKey:@"imageCell"]];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
        UIImage *image = [UIImage imageWithData:imageData];

        dispatch_async(dispatch_get_main_queue(), ^{
            cell.imageView.image = image;
        });    
    });

    return cell;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 URL 加载 UITableViewCell 的图像(需要异步加载) 的相关文章

随机推荐

  • Windows 上的 PHP realpath 案例问题

    我的 Windows 服务器上有一个符号链接 其制作方式如下 F gt mkdir link target F gt mklink D link f link target 注意小写f 在符号链接目标中 在 PHP 中我运行这个 dir r
  • PHP SOAP 请求全部小写

    我创建了一个 Web 服务并使用 SoapUI 来验证它是否正常工作 然而 PHP 客户端在尝试访问它时遇到致命错误 我设置了一个 try catch 以便可以查看输出 SOAP 请求并执行var dump 当我查看请求并var dump
  • Xcode 12.4 React Native 构建在 IOS 中失败显示所有消息命令 PhaseScriptExecution 失败并出现非零退出代码

    我是 React Native 的新手 我想在 React Native 初始化后在 IOS 中运行 React Native 应用程序 应用程序未在 IOS 中运行显示一些错误 显示所有消息 bash Native social logi
  • C# - 初始化器内类字段的闭包?

    考虑以下代码 using System namespace ConsoleApplication2 class Program static void Main string args var square new Square 4 Con
  • 怎么转?如何将多行转换为一行多列?

    我有两张表想要合并 第一张桌子是客户的 另一张桌子是产品的 目前我有 22 个产品 但我想要一个灵活的数据库设计 因此产品数据库中不是有 22 列 而是每个客户的每个产品有 1 行 因此如果我总体添加或删除 1 个产品 我不会必须更改数据库
  • PHP:使用方法作为回调

    我试图使用array walk recursive对于某些事情 并想使用类的方法之一作为回调 所以尝试 array walk recursive TAINTED this gt encode 及其变体都失败了 我最终决定 array wal
  • 如何在 main() 之前调试程序崩溃

    我在 Windows 8 1 上使用 QtCreator 和 Visual Studio 2015 套件来构建我在 Linux 上开发和测试的程序 在 Linux 上它工作正常 但在 Windows 上它立即崩溃 我不知道要寻找什么 除了我
  • .htaccess 中单个 RewriteCond 的多个 RewriteRules

    我的 htaccess 中有以下命令 RewriteCond HTTP HOST www a z0 9 example com NC RewriteRule a z 2 1 2 L RewriteRule 0 9 a z 2 1 3 2 L
  • pieCSS3:不在本地四舍五入

    我正在尝试使用饼图获得圆角 ul li webkit border radius 8px 8px 0 0 moz border radius 8px 8px 0 0 border radius 8px 8px 0 0 color FFFFF
  • 从 API 控制器调用 POST 方法

    我有一个名为 MyFIlesController 的 API 控制器 在其中 我有这个方法 POST api myfiles public void Post FromBody string value 以下是我用 Fiddler 的调用方
  • 有没有java图像库?

    我是 java 图像处理新手 我的任务是重新调整网站图像的大小和比例 有没有一个简单的库可以完成这项任务 一个我必须下载 jar 的库 添加到我的项目中 我不喜欢被迫在 Windows 上安装编解码器和文件 我需要该库仅支持基本功能 Lib
  • Visual Studio 在断点处冻结

    自一周前以来 我在 VS2010 中看到了一个非常烦人的行为 当我正在调试一个项目时 调试器在断点处停止 Windows 冻结了近十秒 我说 Windows死机 是因为这段时间鼠标和键盘没用 该问题仅在我调试特定项目时发生 并且我在两台不同
  • 使用 Java 在 Mac 上以编程方式发送电子邮件(通过 Mac 邮件客户端)

    我对这个问题做了很多研究 但似乎无法为我的问题提出可靠的解决方案 我正在开发一个 Java 客户端应用程序 它 应该 允许用户从 Mac 地址簿中导入联系人 方法是以列表格式获取联系人 并允许用户选择一个子集 全部 然后单击一个按钮 将 邀
  • Java中的Goto语句[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我执行了下面的代码Eclipse http en wikipedia org wiki Eclipse 28software 29 但是GO
  • 人眼注视检测:识别用户正在看板上的位置[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在开发一个项目 上面有板和相机 目标是识别正在看黑板的学生 并确定他们视线的位置 在黑板上 目前 我计划从以下几个方面来应对挑
  • 如何关闭 ASP.NET 必填字段验证器“失去焦点”行为

    我有一些代码 其中一个控件需要两个单独的必填字段验证器 两个验证器都位于单独的验证组中 然后由两个单独的按钮进行验证 当单击按钮时 这种方法效果很好 但如果我在文本框中输入一个值然后将其删除 两个验证器都会显示 有没有办法关闭这种 失去焦点
  • boto s3 Bucket 与 get_bucket

    我尝试访问存储桶内的密钥 尽管我有该密钥的权限 但我没有该权限 为了能够做到get key this is my key 我需要桶对象 conn boto connect s3 key secret key my bucket conn g
  • 实体框架 4 的 System.Reflection.ReflectionTypeLoadException

    我在 Windows 窗体应用程序中使用 EF4 每当我在未安装 Visual Studio 2010 的计算机中运行发布文件时 我都会遇到问题 我总是收到此错误 System Reflection ReflectionTypeLoadEx
  • 如何修改Makefile以支持交叉编译?

    我有以下 Makefile CC g top srcdir SRC DIR cpp src INCLUDES I top srcdir I top srcdir command classes I top srcdir platform I
  • 从 URL 加载 UITableViewCell 的图像(需要异步加载)

    我有一个自定义类 它可以解析 XML 并获取图像的 URL 字符串 我将其存储在数组中 然后我想检索这些字符串来加载图像并将每个字符串显示在 UITableViewCell 中 这是我的代码 UITableViewCell tableVie