快速异步加载tableView图像

2023-12-06

我的代码从网络下载图像并将它们设置为 tableView 单元格 imageView。它工作正常,只是我需要点击一个单元格来刷新单元格的内容并加载图像。我希望图像在加载后立即出现。我尝试在 cellToUpdate 下添加 reloadData() 但应用程序最终陷入无限循环并崩溃。这是我的代码:

        let request: NSURLRequest = NSURLRequest(URL: imgURL)
        let getImage: NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
            if error == nil {
                                    image = UIImage(data: data)

                                    // Store the image in to our cache
                                    self.imageCache[urlString] = image
                                    dispatch_async(dispatch_get_main_queue(), {
                                        if let cellToUpdate = tableView.cellForRowAtIndexPath(indexPath) {
                                            cellToUpdate.imageView?.image = image


                                        }
                                    })
                                }
                                else {
                                    println("Error: \(error.localizedDescription)")
                                }
                            })
        getImage.resume()

使用以下类:

class ImageLoadingWithCache {

    var imageCache = [String:UIImage]()

    func getImage(url: String, imageView: UIImageView, defaultImage: String) {
        if let img = imageCache[url] {
            imageView.image = img
        } else {
            let request: NSURLRequest = NSURLRequest(URL: NSURL(string: url)!)
            let mainQueue = NSOperationQueue.mainQueue()

            NSURLConnection.sendAsynchronousRequest(request, queue: mainQueue, completionHandler: { (response, data, error) -> Void in
                if error == nil {
                    let image = UIImage(data: data)
                    self.imageCache[url] = image

                    dispatch_async(dispatch_get_main_queue(), {
                        imageView.image = image
                    })
                }
                else {
                    imageView.image = UIImage(named: defaultImage)
                }
            })
        }
    }
}

Usage:

var cache = ImageLoadingWithCache()
cache.getImage(YOUR_URL, imageView: YOUR_IMAGEVIEW, defaultImage: "DEFAULT_IMAGE_NAME")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速异步加载tableView图像 的相关文章

随机推荐

  • 尝试关闭 OpenCV 窗口没有效果

    我正在使用 OpenCV 捕获网络摄像头图像 效果很好 但是如果我想在按下按钮时关闭 OpenCV 它不起作用 尝试了cvDestroyWindow NameOfWindow and cvDestroyAllWindows 窗口保持打开状态
  • 如何为 Qt 独立应用程序创建清单文件

    我正在构建一个带有静态链接的 Qt 独立应用程序本指南 我遵循了除最后一步之外的每一步 最后一步包括将清单嵌入到可执行文件中 并且应用程序在许多机器上运行良好 然而 我发现可执行文件无法启动 因为计算机中缺少 MSVCP140 dll 这个
  • AngularJS - 如何在 ng-Repeat 中引用属性名称

    除了呈现对象中属性的值之外 我还想将属性名称呈现为标签 有没有办法做到这一点ng repeat 例如 ul li propertyName option li ul 可能会输出这样的内容 ul li Name John li li Phon
  • 如何在不选择新实例的情况下将一个查询的结果连接到另一个查询的结果中? [复制]

    这个问题在这里已经有答案了 我有一个类 它的数据来自两个不同的来源 一个是数据库 另一个是 Web API 数据库源为我提供了大部分数据 而 Web API 仅提供了一些属性 我使用 Dapper 从数据库获取数据 作为IEnumerabl
  • Rails 中不兼容的字符编码 - 如何明智地失败/跳过?

    我通过 IMAP 导入电子邮件主题时遇到问题 我遇到了一个问题 我认为与电子邮件主题中的 符号有关 花了几个小时浏览各种答案后 我似乎找不到任何有用的东西 如果我尝试以下操作 使用红宝石2 1 2 浏览量 电子邮件 索引 email sub
  • Excel VBA - 在某些条件下删除行

    如果一行有值INACTIVE in column D and N A in column H 我想删除该行 我试图用下面的代码来实现这一点 但实际上没有行被删除 Dim ws3 As Worksheet Dim r As Integer S
  • Bootstrap Datepicker - 如何将值发送到 URL?

    我必须承认我对 Javascript 毫无希望 PHP 更适合我 我正在尝试使用 Bootstrap Datepicker 进行预订系统 我正在尝试找到一种方法 当您单击日期时 它将重新加载页面并将日期发送到 URL 就像是 http ex
  • 无法读取反应中未定义的属性“someProperty”

    我正在开发一个应用程序 在该应用程序中 我使用状态从一个组件传递到另一个组件的 Navlink 中的变量值 然后将这些接收到的值加载到输入字段中 然后单击该另一个组件中的提交按钮以对值执行某些操作 当我提醒他们时 我的值会被正确接收并正确显
  • 添加到构造函数中的只读集合?

    是否有 C 语言构造允许我将项目添加到构造函数中的只读集合属性 我想做这样的事情 public class Node public IList
  • 设计从 gem 渲染默认视图而不是生成的视图?

    我在安装设备时为两个用户模型生成了视图 控制器 无论出于何种原因 正在渲染 gem 本身内部包含的视图 而不是我添加的视图 views users registrations new html erb views bizusers regi
  • jQuery 隐藏/显示并在悬停时滑动...更好的方法吗?

    基本上在使用悬停来隐藏或显示项目时遇到一些问题 想法很简单 悬停时显示一个 div 当不再悬停时 将其隐藏 问题是 如果鼠标悬停在 div 上并离开得太快 则显示 隐藏 div 将保持可见 我希望这是很容易解决的问题 而不是悬停事件的典型问
  • CUDA 9 shfl 与 shfl_sync

    自 CUDA 9 起 shfl 指令已弃用 应由 shfl sync 替换 但是 当它们表现不同时 我应该如何替换它们呢 代码示例 global static void shflTest int tid threadIdx x float
  • Chrome 和媒体查询错误

    我正在尝试制作一个基本上由一些垂直放置的幻灯片组成的网站 我一直希望做出响应式设计 以便我的 幻灯片 在更大的屏幕尺寸上适当调整大小 或者以奇怪的尺寸适当填充 这是我设置适当尺寸的 LESS 文件 html body width 100 h
  • 使用 Graph API 更新 M365 Group 的敏感度标签,PowerShell 抛出 401 错误

    UGH 当我尝试使用 Graph API 和 PowerShell 更新 M365 组敏感度标签信息时 我遇到了 401 错误 使用 Graph Explorer 野兽工作得很好 但使用 PowerShell 我收到一个错误Invoke R
  • 使用 Gluon 在 APK META-INF/INDEX.LIST 中复制的重复文件

    我正在 javafx 上的 netbeans 中使用最新的 gluon 版本开发代码 当我在笔记本电脑中运行它时 程序没有问题 但是当我尝试在 android 中运行时 我实现了这个消息 com android builder packag
  • 如何获取xml文件中每个节点的完整路径?

    我正在使用 xpath 遍历 xml 文件 我想知道是否有一种简单的方法来获取文件中每个节点的路径 我能想到的一种方法是收集数组中的所有节点 然后将其传递到一个函数 该函数将每个节点作为参数 并不断寻找父节点 直到到达文档根 所以 func
  • 如何使用状态访问器获取 Bot Framework 中的属性

    我的机器人的功能之一是处理购物车 用户可以在对话中的任何位置添加商品 然后完成购物以关闭产品购物车 为了避免将购物车从一个对话框传递到另一个对话框 我想创建一个UserProfile财产在UserState The UserProfile财
  • 如何将 Express 中的数据呈现为 HTML 表格?

    我有一个简单的server js应用 一种路由是 api showaccounts 路由 其范围是从 MongoDB 获取一系列帐户 包含用户名 余额和名称字段 app post api showaccounts async req res
  • 这个内核函数可以更具可读性吗? (学术研究所需的想法!)

    按照我之前的问题关于极长函数背后的基本原理 我想提出一个关于一段代码我正在为我的研究而学习 它是 Linux 内核中的一个函数 相当长 412 行 且复杂 一个中冶指数共 133 条 基本上 这是一个长而嵌套的 switch 语句 坦白说
  • 快速异步加载tableView图像

    我的代码从网络下载图像并将它们设置为 tableView 单元格 imageView 它工作正常 只是我需要点击一个单元格来刷新单元格的内容并加载图像 我希望图像在加载后立即出现 我尝试在 cellToUpdate 下添加 reloadDa