首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >展开可选元素时出错

展开可选元素时出错
EN

Stack Overflow用户
提问于 2017-12-06 14:20:42
回答 2查看 50关注 0票数 0

我有一个可选元素,但在表视图中显示上述元素时会遇到错误。作为参考,此元素是从JSON提要中获取的图像。我理解这个力用一个元素展开!这不是一个好主意,但这正是xcode建议我做的,没有给我其他的选择。如果我遵循它的建议,应用程序就会崩溃,显示“意外地找到了零,而打开了一个可选的值”。让任何人都知道我如何从URL中显示图像。这是我到目前为止所掌握的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct PlayerStats:Decodable {
    let personaname: String?
    let score: Double?
    let solo_competitive_rank: Int?
    let avatar: String?
}

问题在于cellForRowAt函数中的"avatar“元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: "rankCell") as? RankTableViewCell else { return UITableViewCell() }
    cell.nameLabel.text = rank[indexPath.row].personaname

    if let imageURL = URL(string: rank[indexPath.row].avatar) {
        DispatchQueue.global().async {
            let data = try? Data(contentsOf: imageURL)
            if let data = data {
            guard let avatar = UIImage(data: data) else { return }
                DispatchQueue.main.async {
                    cell.avatarImage.image = avatar
                }
            }
        }
    }

    return cell
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-06 14:26:39

如果avatarnil,代码就会崩溃。您需要分两个步骤创建URL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if let avatar = rank[indexPath.row].avatar,
   let imageURL = URL(string: avatar) { ...

或者将avatar直接解码到URL,JSONDecoder可以

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let avatar: URL?

然后您可以缩短代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if let imageURL = rank[indexPath.row].avatar {

正如Dávid所提到的,我们强烈建议您不要使用同步Data(contentsOf: API。使用异步URLSession

票数 1
EN

Stack Overflow用户

发布于 2017-12-06 14:42:56

除了需要安全地展开可选的avatar属性这一事实之外,您的代码还存在一些概念性问题。

首先,您不应该在tableView(_:cellForRowAt:)中执行异步操作,因为这是一个同步方法,所以在从网络URL下载映像之前将返回UITableViewCell。在异步操作完成执行后,您需要在一个单独的函数中执行映像下载,并重新加载表视图(或至少相应的行/节)。

其次,不要使用初始化器Data(contentsOf:)从互联网下载内容。即使通过发送Data(contentsOf: imageURL),您也不会阻塞主线程,数据初始化器不应该用于从internet下载内容。该初始化器只应用于从本地文件URL加载内容,而不是网络URL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47684417

复制
相关文章
如何在Ubuntu上安装Buildbot
Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布。它使用Python的Twisted库来处理buildmaster和多个worker之间的异步通信,以便在多个平台上测试构建。Buildbot具有高度可配置性并且几乎可秒级应对构建过程,使其适用于复杂的构建过程或需要其工具随项目的独特需求而增长的项目。在本教程中,我们将在同一台机器上安装和配置Buildbot buildmaster和worker。
林岑影
2018/07/27
2.2K0
如何在Ubuntu上安装Docker?
Docker是一种流行的容器化平台,用于在不同的环境中快速部署和运行应用程序。它提供了一种轻量级和便捷的方式来封装、分发和管理应用程序及其依赖项。本文将详细介绍如何在Ubuntu上安装Docker,以便您能够开始使用Docker来构建和管理容器化的应用程序。
网络技术联盟站
2023/09/04
25.2K2
如何在Ubuntu上安装Docker?
如何在Ubuntu上安装Go
Go是由Google开发的编译的静态类型编程语言。许多现代应用程序,包括Docker,Kubernetes和Caddy,都是用Go编写的。本文将介绍如何在Ubuntu系统上安装GO语言开发运行环境。学习本文你需要一台已经设置好可以使用sudo命令的非root账号的服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费**的腾讯云开发者实验室进行试验,学会安装后在购买服务器。
何处惹尘埃
2018/08/17
1.7K0
如何在Ubuntu上安装Jenkins
Jenkins是一个开源自动化服务器,旨在自动执行持续集成和交付软件所涉及的重复技术任务。Jenkins是基于Java开发,可以从Ubuntu软件包安装,也可以使用ARchive(WAR)文件构成一个完整的Web应用程序,在服务器上运行。
宇cccc
2018/08/03
1.6K0
如何在Ubuntu上安装Jenkins
如何在Ubuntu上安装ionCube
ionCube是一个PHP模块扩展,可加载加密的PHP文件并加速网页。ionCube Encoder可以把PHP源代码转换成ByteCode。进行加密授权处理后的PHP代码就不在开源了,必须使用ionCube loader才可以执行加密过的PHP代码。PHP本身没有带有ionCube loader模块, 必须到ionCube网站下载。在本教程中,我们将在Ubuntu 16.04服务器上安装ionCube。
尘埃
2018/07/31
1.9K0
如何在Ubuntu上安装ionCube
如何在Ubuntu上安装ownCloud
ownCloud是一个自由且开源的个人云存储解决方案,包括两个部分:服务器和客户端。ownCloud 最早由KDE开发者Frank Karlitschek于2010年一月创建,目标是成为商业云服务提供商的替代。与商业云存储服务不同,ownCloud可以自由获取无需付费,但相应地,用户必须自行架设 ownCloud的服务器,这需要一点技术。在本教程中,我们将教你在Ubuntu 18.04服务器上安装和配置ownCloud服务器。
司徒永哥
2018/08/01
3.5K0
如何在Ubuntu上安装ownCloud
如何在Ubuntu上安装SELinux
Ubuntu有一个类似于SELinux的强制访问控制系统,名为AppArmor。SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。SELinux和AppArmor都提供了一组工具来隔离应用程序,以保护主机系统免受攻击。AppArmor为Ubuntu用户提供强制访问控制选项,没有SELinux可能遇到的困难或学习曲线效应。如果您想要切换到Ubuntu,已经熟悉SELinux并希望使用它来强制系统的安全性,您可以按照这个简短的教程安装它。
挺问中原
2018/08/16
12.5K2
如何在Ubuntu上安装MutliCraft
PS:本文撰写前已查询相关法律,本文内容不违反《互联网文化管理暂行规定》,遵守EULA协议,请勿举报。
宇cccc
2018/08/14
3K0
如何在Ubuntu上安装MutliCraft
如何在Ubuntu上安装MySQL/MariaDB
本教程面向Ubuntu服务器,适用于Ubuntu的任何LTS版本,包括Ubuntu 14.04,Ubuntu 16.04,Ubuntu 18.04,甚至非LTS版本(如Ubuntu 17.10和其他基于Ubuntu的发行版)。我们在Ubuntu 16.04服务器上测试了这个。
星哥玩云
2022/08/16
1.9K0
如何在Ubuntu 16.04上安装MongoDB
MongoDB是一个免费的开源NoSQL文档数据库,在现代Web应用程序中常用。本教程将帮助您在服务器上为生产应用程序环境设置MongoDB。
何处惹尘埃
2018/10/11
1.7K0
如何在 Ubuntu 20.04 上安装 MySQL
https://www.itcoder.tech/posts/how-to-install-mysql-on-ubuntu-20-04/
雪梦科技
2020/04/29
6.6K0
如何在 Ubuntu 20.04 上安装 MySQL
如何在 Ubuntu 20.04 上安装 Vagrant
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-vagrant-on-ubuntu-20-04/
雪梦科技
2020/06/04
1.4K0
如何在 Ubuntu 20.04 上安装 Vagrant
如何在 Ubuntu 20.04 上安装 MariaDB
本文最先发布在:https://www.itcoder.tech/posts/how-to-install-mariadb-on-ubuntu-20-04/
雪梦科技
2020/05/22
3.7K0
如何在 Ubuntu 20.04 上安装 MariaDB
如何在 Ubuntu 20.04 上安装 Elasticsearch
Elasticsearch 是一个开源全文搜索和分析引擎。它支持 RESTful 操作,并且允许你存储,搜索,并且实时分析大量的数据。Elasticsearch是最流行的搜索引擎之一,可为具有复杂搜索要求的应用程序提供动力,例如大型电子商务商店和分析应用程序。
雪梦科技
2020/07/08
9.9K3
如何在 Ubuntu 20.04 上安装 TeamViewer
TeamViewer 是一个跨平台解决方案,它可以被用来进行远程控制,桌面共享,在线会议,以及计算机之间的文件传输。
雪梦科技
2020/06/30
5.8K0
如何在 Ubuntu 20.04 上安装 TeamViewer
如何在Ubuntu 18.04上安装Jenkins
Jenkins是一个开源自动化服务器,可以自动执行持续集成和交付软件所涉及的重复技术任务。Jenkins是基于Java的,可以从Ubuntu软件包安装,也可以通过下载和运行其Web应用程序存档(WAR)文件来安装 - 该文件是构成在服务器上运行的完整Web应用程序的文件集合。
吴凌云
2018/10/09
4.7K0
如何在Ubuntu 14.10 上安装WordPress?
WordPress 是一种使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把  WordPress 当作一个内容管理系统( CMS )来使用。
星哥玩云
2022/07/04
5620
如何在Ubuntu 14.10 上安装WordPress?
如何在Ubuntu 16.04上安装Nginx
Nginx是世界上最受欢迎的网络服务器之一,负责托管互联网上一些规模最大,流量最高的网站。在大多数情况下,它比Apache更加资源友好,可以用作Web服务器或反向代理。
小皇帝James
2018/10/11
2.4K0
如何在 Ubuntu 20.04 上安装 Git
Git 是世界上最流行的分布式版本控制系统,它被众多的开源和商业项目所采用。它允许你和你的开发同事进行分工合作,跟踪你的代码变化,恢复前一个暂存区,创建分支等等。
雪梦科技
2020/05/11
8840
如何在 Ubuntu 20.04 上安装 Nginx
Nginx 发音 “engine x” ,是一个开源软件,高性能 HTTP 和反向代理服务器,用来在互联网上处理一些大型网站。它可以被用作独立网站服务器,负载均衡,内容缓存和针对 HTTP 和非 HTTP 的反向代理服务器。
雪梦科技
2020/05/11
2.1K0

相似问题

PHP:将特定的csv行读取到二维数组中

30

将文件读取到特定行php

30

PHP将txt从特定行读取到末尾。

24

将CSV中的特定列读取到阵列

31

特定CSV读滤波

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文