首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >持久化图像阵列

持久化图像阵列
EN

Stack Overflow用户
提问于 2015-09-25 13:46:34
回答 2查看 642关注 0票数 2

我希望能够保存一个数组cardImages,该数组通过SwiftyUserDefaults包含UIImages。

期望行为

以下是我们所期望的行为:

通过UIImages库将一个NSUserDefaults数组保存到NSUserDefaults 稍后检索图像

代码这被简化为非常少的代码

代码语言:javascript
运行
AI代码解释
复制
    var newPhotoKey = DefaultsKey<NSArray>("image")//Setting up the SwiftyUserDefaults Persisted Array

        cardImages = [(UIImage(named: "MyImageName.jpg")!)] //This array contains the default value, and will fill up with more
        Defaults[theKeyForStoringThisArray] = cardImages //This is the persisted array in which the array full of images should be stored. WHERE THE ERROR HAPPENS

var arrayToRetreiveWith = Defaults[theKeyForStoringThisArray] as! [UIImage] //To Retreive

误差

我得到以下错误:

尝试将非属性列表对象( ",{300,300}“)设置为键图像*终止应用程序的NSUserDefaults/CFPreferences值,原因是:”尝试插入密钥图像的非属性列表对象( ",{300,300}“)

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-25 14:14:06

实际上,错误信息是明确的。UIImage不是属性列表,因此需要首先将其更改为行数据。我将在下面举个例子,但是FYI不推荐使用NSUserDefaults保存大数据,比如图像。我会使用NSFileManager并将其放在用户文档目录中。不管怎样,

代码语言:javascript
运行
AI代码解释
复制
var newPhotoKey = DefaultsKey<NSArray>("image")
cardImages = [(UIImage(named: "MyImageName.jpg")!)] 
var cardImagesRowdataArray: NSData = []
for image in cardImages {
    let imageData = UIImageJPEGRepresentation(image, 1.0)
    cardImagesRowdataArray.append(imageData)
}
Defaults[theKeyForStoringThisArray] = cardImagesRowdataArray 

var arrayToRetreiveWith = Defaults[theKeyForStoringThisArray] as! [NSData]
// here you can use UIImage(data: data) to get it back

如果您不坚持使用SwiftyUserDefaults,您可以将它保存在用户文档目录中,下面是如何做到的

代码语言:javascript
运行
AI代码解释
复制
func saveImage(image: UIImage){
    if let imageData = UIImageJPEGRepresentation(image, 1.0) {
         let manager = NSFileManager()
         if let docUrl = manager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first{
             let uniqueName = NSDate.timeIntervalSinceReferenceDate()
             let url = docUrl.URLByAppendingPathComponent("\(uniqueName).jpg")
             imageData.writeToURL(url, atomically: true)
         }
     }
 }
票数 3
EN

Stack Overflow用户

发布于 2015-09-25 14:12:17

用户默认值的值必须是属性列表。财产表

  • 字符串(StringNSString),
  • 一个NSData
  • 一个日期(NSDate),
  • 一个数字(NSNumber),
  • 布尔值(也是NSNumber),
  • 一个属性列表数组,
  • 或者一个字典,它的键是字符串,其值是属性列表。

UIImage不是这些,所以UIImage不是属性列表,也不能是属性列表的一部分。

您需要将图像转换为NSData以将其存储在用户默认情况下。由于UIImage除了包含原始像素数据外,还包含一些属性(如scaleimageOrientation),因此将UIImage转换为没有损失的NSData的最简单方法是创建存档

代码语言:javascript
运行
AI代码解释
复制
let cardImage: UIImage? = someImage()
let cardImageArchive: NSData = NSKeyedArchiver.archivedDataWithRootObject(cardImage!)

现在,您可以将cardImageArchive存储在一个更大的属性列表中,您可以将其存储为用户默认设置。

稍后,当您需要从数据重新创建图像时,请执行以下操作:

代码语言:javascript
运行
AI代码解释
复制
let cardImageArchive: NSData = dataFromUserDefaults()
let cardImage: UIImage = NSKeyedUnarchiver.unarchiveObjectWithData(cardImageArchive) as! UIImage
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32791104

复制
相关文章
flask 使用sendgrid发送邮件(flask 33)
import sendgrid from sendgrid.helpers.mail import Email as SGEmail, Content, Mail as SGMail from flask_mail import Mail, Message from flask_wtf import FlaskForm from wtforms import StringField, TextAreaField, SubmitField from wtforms.validators import DataRequired, Email from flask import Flask, flash, redirect, url_for, render_template, request
用户5760343
2019/08/13
8470
Linux下使用Shell为SendGrid Email API 发送邮件
将代码存为shell文件,将上一个文件的echo输出改成执行此文件即可自动推送到邮箱。
子润先生
2021/06/14
1.1K0
使用 PHP发送电子邮件
PHP 运行邮件函数需要一个已安装且正在运行的邮件系统(如:sendmail、postfix、qmail等)。所用的程序通过在 php.ini 文件中的配置设置进行定义。
小颖club
2022/04/11
2.6K0
python利用flask_mail、sendgrid发送邮件[通俗易懂]
在学习Flask,看的书籍是《Flask Web开发实战 入门、进阶与原理解析》。在学习发送电子邮件这一章节时,遇到一些问题,便写下这一篇文章,记录一下,也希望遇到同样问题的人能够花较少时间在解决问题上。
全栈程序员站长
2022/11/17
1.8K0
python利用flask_mail、sendgrid发送邮件[通俗易懂]
PHP 使用 phpmailer 发送电子邮件
phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
OwenZhang
2021/12/08
2.2K0
PHP 使用 phpmailer 发送电子邮件
使用Python发送自定义电子邮件
电子邮件仍然是事实。 尽管存在各种弊端,但它仍然是向大多数人发送信息的最佳方法,特别是允许邮件排队等待收件人的自动方式。
用户7886150
2021/01/28
2.9K0
发送电子邮件
在即时通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的,而这些任务应该都是由程序自动完成的。
用户8442333
2021/05/20
2.4K0
.NET Core 使用MailKit发送电子邮件
发送邮件通知的功能在各种系统里都很常见。我的博客也能在有新评论、新回复,或者文章被其他网站引用时向管理员发送邮件。那么在.NET Core里,如何实现发送电子邮件呢?
Edi Wang
2019/07/08
6.1K0
.NET Core 使用MailKit发送电子邮件
SpringBoot发送邮件+使用html模板发送邮件
这两天在公司做商城系统有一个业务用到了发送邮件功能 springboot 有spring-boot-starter-mail
@依然范特西
2022/12/12
3K0
使用Postfix,Dovecot和MySQL发送电子邮件
在本指南中,您将学习如何在Debian或Ubuntu上使用Postfix,Dovecot和MySQL设置安全的虚拟用户邮件服务器。我们将解释如何创建新的用户邮箱以及如何在配置的域中发送或接收电子邮件。
Techeek
2018/09/18
3.9K0
使用Postfix,Dovecot和MySQL发送电子邮件
Spring发送电子邮件
Spring基于javax.mail封装了一套用于发送电子邮件的API,位于org.springframework.mail包下,下面将介绍下发送普通文本邮件和基于thymeleaf模版的邮件。
布禾
2020/10/29
1.8K0
Spring发送电子邮件
Jenkins使用之邮件模板配置
Jenkins默认提供了一个邮件通知,能在构建失败、构建不稳定等状态后发送邮件。但是它本身有很多局限性,比如它的邮件通知无法提供详细的邮件内容、无法定义发送邮件的格式、无法定义灵活的邮件接收配置等。为解决这些问题,我们将使用 Email Extension 插件。该插件可以自定义邮件通知,如在发送邮件时自定义发送给谁以及具体内容等。本文主要对jenkins的邮件模板配置及通知进行介绍。
用户5521279
2020/03/19
4.5K0
Jenkins使用之邮件模板配置
SpringBoot使用FreeMarker模板发送邮件
由于本文属于付费文章,获取全文,可点击文末【阅读原文】,即可到达【秋码记录】https://qiucode.cn/article/96 1、添加相关依赖 1.1、使用Maven,在pom.xml添加如下依赖: <!-- 邮件所需依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!--
游离于山间之上的Java爱好者
2022/12/19
1.4K0
SpringBoot使用FreeMarker模板发送邮件
PHP 使用 phpmailer 发送电子邮件 以及封装方法
phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。
Inkedus
2020/04/16
3.4K0
PHP 使用 phpmailer 发送电子邮件 以及封装方法
Spring Boot发送电子邮件
通过使用Spring Boot RESTful Web服务,可以发送包含Gmail传输层安全性的电子邮件。在本章中,详细了解如何使用此功能。
黑洞代码
2021/10/14
1.4K0
Elasticsearch索引模板与动态mapping模板(四)
前面我们介绍了mapping相关的属性,细心的朋友可能会发现,在我们最开始使用ES的时候,可能还不太了解mapping,也没有添加过mapping为什么我们还是能够正常的添加文档。
问道白发
2019/12/15
5.1K0
Elasticsearch索引模板与动态mapping模板(四)
PHP发送电子邮件代码
注意:PHP 需要一个已安装且正在运行的邮件系统,以便使邮件函数可用。所用的程序通过在 php.ini 文件中的配置设置进行定义。
用户1503405
2021/09/27
1.8K0
如何在FreeBSD 10.1上使用Sendmail通过外部SMTP服务发送电子邮件
设置新的Web服务器时最常见的需求之一是发送电子邮件。最安全,最简单的方法是将服务器连接到SendGrid或Amazon SES等邮件服务。使用外部服务将帮助您避免陷阱,例如您的服务器IP被反垃圾邮件服务列入黑名单。
温浪
2018/10/19
3.2K0
点击加载更多

相似问题

使用sendgrid节点模块,如何发送SendGrid模板引擎电子邮件?

23

使用csv的数据与Sendgrid一起发送电子邮件

19

发送没有模板的Sendgrid电子邮件

17

如何在python中使用sendgrid和动态模板、BCC地址发送电子邮件?

110

Sendgrid:用模板发送电子邮件

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档