首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么UserDefaults.standard.set不保存我的数组?从后台删除应用程序后,数据将被清除

UserDefaults是iOS中用于存储用户偏好设置和小量数据的工具。它使用键值对的方式存储数据,可以保存基本数据类型、自定义对象、数组等。

然而,当使用UserDefaults保存数组时,可能会遇到数据不保存的问题。这是因为UserDefaults只能存储特定的数据类型,而数组是一个复杂的数据结构,不是UserDefaults所支持的类型之一。

为了解决这个问题,我们可以使用以下方法之一:

  1. 将数组转换为NSData类型:可以使用NSKeyedArchiver将数组转换为NSData类型,然后再保存到UserDefaults中。示例代码如下:
代码语言:swift
复制
let array = ["item1", "item2", "item3"]
let data = NSKeyedArchiver.archivedData(withRootObject: array)
UserDefaults.standard.set(data, forKey: "myArray")
  1. 使用PropertyListEncoder编码数组:PropertyListEncoder是一种用于编码和解码属性列表的工具。可以使用它将数组编码为PropertyList格式的数据,然后保存到UserDefaults中。示例代码如下:
代码语言:swift
复制
let array = ["item1", "item2", "item3"]
if let data = try? PropertyListEncoder().encode(array) {
    UserDefaults.standard.set(data, forKey: "myArray")
}
  1. 使用JSONEncoder编码数组:JSONEncoder是一种用于编码和解码JSON数据的工具。可以使用它将数组编码为JSON格式的数据,然后保存到UserDefaults中。示例代码如下:
代码语言:swift
复制
let array = ["item1", "item2", "item3"]
if let data = try? JSONEncoder().encode(array) {
    UserDefaults.standard.set(data, forKey: "myArray")
}

需要注意的是,当从后台删除应用程序后,UserDefaults中的数据将被清除。这是因为UserDefaults是应用程序的沙盒中的一个文件,当应用程序被删除时,沙盒中的所有文件都会被清除。

推荐的腾讯云相关产品:腾讯云对象存储(COS),它是一种高可用、高可靠、低成本、安全的云存储服务,适用于存储和处理各种非结构化数据,包括图片、音视频、文档等。产品介绍链接地址:https://cloud.tencent.com/product/cos

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AS3 内存回收机制

(1)关于垃圾收集器   垃圾收集器是一个后台进程它负责回收程序中不再使用的对象占用的内存。非活动对象就是不再有任何其他活动对象引用它。...当你创建一个指向某个对象的引用,该对象的引用计数器加1;当你删除该对象的一个引用,该计数器减1.当某对象的计数器变成0,该对象将被标记以便垃圾回收器回收。     ...FlashPlayer从你的应用程序根对象开始(ActionScript3.0中简称为root)直到程序中的每一个引用,都为引用的对象做标记。 接下来,FlashPlayer遍历所有标记过的对象。...引用的包括          1)  对对象的存储: 例如 使用一个数组保存 某些对象,那么数组不释放,对象不可能释放          2)  对事件的监听: 例如 监听过程实际上是使用一个对象保存关键字和关键字关联的事件...如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除;         8.

76110

Swift 中 User Defaults 的读取和写入

介绍 User Defaults 应用程序通常使用 User Defaults 来存储用户的首选项。你可以存储首选项,例如用户最喜欢的股票或保存特定用户状态,例如“用户已看到引导”。...我在 Stock Analyzer 中使用此技术,根据主应用程序中配置的最喜欢的股票填充小部件。...User Defaults 支持以下类型: 数据 字符串 数字(NSNumber) 日期 数组 字典 布尔值 如果你的类型不在此列表中,你需要找到一种将其转换为任何受支持类型的方法。...例如,我在以下视频中正在开发 WeTransfer 应用程序中显示的工具提示。...用于跨平台的 CloudKit 如果希望首选项可以从安装了你的应用程序的其他 Apple 设备访问,请考虑使用 NSUbiquitousKeyValueStore。

31520
  • 应用程序内购买教程:入门

    image 完成本教程后,将会在表格视图中列出一个您可以购买的RazeFaces列表。如果您删除并重新安装该应用程序,“ 还原”按钮将恢复以前购买的任何RazeFaces。...如果需要通过新的购买代码进行多次测试并且您的电子邮件提供商不支持限定符,那么请考虑设置可消耗的IAP仅用于测试目的。每次测试后删除设备上的应用程序,购买耗材IAP将被视为新购买。...它接收一个SKProduct对象数组并将它们传递给先前保存的完成处理程序。处理程序使用新数据重新加载表。如果出现问题,request(_:didFailWithError:)则调用。...在任何一种情况下,当请求完成时,请求和完成处理程序都将被清除clearRequestAndHandler()。 建立并运行。万岁!表格视图中显示了产品列表(目前只有一个)!...您已经设置了事务观察器并实现了方法来处理上一步中的恢复事务。 要对此进行测试,请在上一步中完成购买后,从设备中删除该应用。再次构建并运行,然后点击右上角的“恢复”。

    5.5K20

    Ask Apple 2022 中与 Core Data 有关的问答

    在我的设置中,存储被保存到一个应用程序组目录中,以允许从应用程序和扩展程序访问,所以我认为每个进程都将利用各自的容器来访问它。...但是,没有给出明确的提示关于如何在不影响 CloudKit 正确性的情况下以安全的方式清除历史。给出的示例是删除所有超过 7 天的事务。但是,为什么是 7 天?为什么不是 14 天?...你的特定应用程序的写入速率可能需要不同的时间窗口,但是当使用 NSPersistentCloudKitContainer 清除历史记录时,可能会强制将存储文件数据全面同步到 CloudKit,因此不建议经常这样做...无论进行清除的时间间隔为多少,我都不建议开发者清除 CloudKit 为自动同步创建的历史事务( 绝大多数情况下,NSPersistentCloudKitContainer 会在确保同步完成后自动进行删除...在我们的例子中,我们首先从实体中删除所有数据( 也就是将该数据迁移到新实体 ),然后从项目中删除该实体,因为我们可以确定所有用户都已升级。A:是的,但是,旧版本的应用程序会做什么?

    2.9K20

    JavaScript LocalStorage 完整指南

    但是,localStorage 中的数据会一直保存到清除为止。 localStorage 特性在许多用例中都是有帮助的。...「持久性」:使用 localStorage 最常见的原因之一是保持数据持久性。虽然 sessionStorage 也可以以 key-value 的形式存储数据,但当会话结束时,它将被清除。...("data"); // null 4.3 使用 removeItem 删除特定项 顾名思义,removeItem() 方法从 localStorage 中删除一个特定的键值对。...另一方面,每当会话结束时,sessionStorage 将被清除。打开一个新选项卡或访问一个新域将清除特定域的会话。...小结 localStorage 特性可以为你的应用程序提供好处,包括可以将数据持久保存到你需要的时间的开放式存储,以及使应用程序脱机工作的能力。

    2.3K10

    用这些 iOS 技巧让你的 APP 性能更佳

    但你有没有想过为什么必须使用这个笨拙的 API,而不是只传递一个 TableViewCell的数组?让我们来看看为什么。 假设你有一个有一千行的表视图。...有时,由于内存不足,操作系统可能需要在应用程序处于后台时从内存中删除应用程序,如果不保留状态,应用程序可能会丢失其对最后一个UI状态的跟踪,可能会导致用户丢失正在进行的操作!...您是否曾体验过,从多任务屏幕恢复应用程序后,该应用程序显示的用户界面与多任务视图中显示的快照有什么不一样? 这是因为应用程序没有实现状态恢复机制,当应用程序在后台被杀死时,显示的数据丢失。...请记住,当应用程序被用户强行关闭时,操作系统将删除已保存的状态,避免在状态保存和恢复时出现问题。...当用户强制退出你的应用程序时,状态数据将被删除,你当然不希望以这种方式丢失模型数据。 要测试状态保存和恢复是否正常,请按照以下步骤操作: 使用Xcode构建和启动应用程序。

    3.2K30

    CleanMyMac X2023最新版有什么新功能?

    让我们来看看该应用程序帮助将Mac从所有垃圾中解放出来的一些方法,以便您可以优化设备的性能。具体来说,我们将评论重点放在流动的清理功能上:系统垃圾,照片垃圾邮件,邮件附件,iTunes垃圾和垃圾箱。...系统垃圾清理功能该应用程序带有系统垃圾清理功能,旨在删除您可能已安装在设备上的应用程序和操作系统留下的所有文件和其他垃圾。删除这些文件后,您将获得更多空间和优化的体验。...第 2 步:扫描完成后,您点击"运行",CleanMyMac为您提供了一个选项,可以保存工作并退出一些仍然需要使用的应用程序。如果忽略此提示,应用程序可能会崩溃,并且可能会丢失所有未保存的数据或更改。...它会自动删除所有恶意文件,关闭消耗内存的后台应用程序,并降低设备速度。...第 4 步:完成运行后,CleanMyMac功能将提供新的系统状态报告,指示已释放的空间量,删除的恶意文件和数据的数量以及关闭的所有后台任务。

    63000

    UserDefaults 浅析及其使用管理

    前言 Hi Coder,我是 CoderStar! 我想每一个 iOSer 对UserDefaults都有所了解,但大家真的完全了解它吗?下面,我谈谈我对UserDefaults的看法。...以防止存取冲突; plist 文件越来越大造成的读写效率问题; 无法便捷的清除由某一个 SDK 创建的 UserDefaults 数据; 针对上述问题,我们可以使用第三种方式,也是本文主要介绍的一种方式...因为UserDefaults存储的数据都是明文,没有经过加密,所以尽量不要使用UserDefaults存储敏感数据,即使使用,也要使用加密算法对其进行加密后再存储进去。...但由于UserDefaults也是遵循了NSKeyValueCoding协议的,所以使用value(forKey:)也是可以获取到数据,但是不建议这种用法。...其中需要注意的是UserDefaults对数据的操作影响plist文件的改变这一过程是异步的,也就是说你修改了UserDefaults某一个 key 的值,紧接着去获取这个 key 的值,得到的也会是修改后的值

    1.2K10

    JavaScript 是如何工作的:Service Worker 的生命周期及使用场景

    注册 Service Worker 后,它会提示浏览器在后台启动 Service Worker 安装步骤。...Service Worker 一旦掌控,它将处于以下两种状态之一: 处理从网页发出网络请求或消息时发生的提取和消息事件 Service Worker 将被终止以节省内存 Service Worker 生命周期如下...一旦你的 Web 应用程序当前打开的页面被关闭,旧的 Service Worker 将被浏览器杀死,新 Service Worker 接管了控制权,它的激活事件将被激发 为什么需要这些?...从缓存中删除数据 在激活回调中发生的一个常见任务是缓存管理。...你的点赞是我持续分享好东西的动力,欢迎点赞! 一个笨笨的码农,我的世界只能终身学习!

    92610

    GC Roots,safePoint安插点,STW,CMS;Davliku002FART垃圾回收

    方法区中清除垃圾常量和垃圾类 1.常量: 常量不被引用,就会从常量池中清除 2.类: 需要满足以下条件: 2.1.该类的所有对象都已被清除 2.2.该类的java.lang.Class对象没有被任何对象或变量引用...2.原始快照: 当灰色对象删除白色对象的引用时,将这个灰色对象记录下来,等到扫描结束后,在对这些灰色对象为根进行扫描,简单理解为:不管是否删除与否都会按照第一次刚开始的引用关系图进行扫描。...二,主动式中断: 我不直接对我的用户线程操作,当发生GC时,我给用户线程设立个标志位,用户线程执行的时候不断轮询这个标志位,如果轮询到了那么我将自己中断我自己的运行,由于这种方式是轮询到就立马进行挂起所以将轮询的地方和...优化一下: 每个不同的分代中都存着一个数组,这个数组中对堆内存进行一个映射, 我数组中的每一小块对应的元素是分代中固定大小的内存(比如我第一个数组下标表示我引用的是0到100,第二个数组下标表示引用的是...那么,为什么要复制呢,所有应用程序共享一个堆空间不就行了?不行! 如果所有应用程序共享一个堆空间,那么如果其中一个应用程序爆炸式的写数据,就会导致OOM,顺便就连累了其它的应用程序.所以一定要拆开.

    43720

    01_Cookie&WebStorage

    本地数据可以即时获得。借助浏览器的缓存,整个页面和数据都可以保存在本地,从本地读数据比通过网络从服务器获得数据快得多,可以立即显示网页中的缓存的内容。 数据可以临时存储。...也就是说,使用了本地存储的数据将被持久化保存。 localStorage与sessionStorage的区别 存储数据的生命周期不同。...而sessionStorage的数据保存在内存中,当浏览器关闭后,内存将被自动清除。...当浏览器标签页关闭后,sessionStorage中存储的数据将被自动清除。 如果打开了不同的标签页,即使是同一页面,sessionStorage对象也是不同的。...有效时间:localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据。sessionStorage 数据在页面会话结束时会被清除。

    7200

    为什么我的 Mac 运行缓慢以及如何使用CleanMyMac X修复它

    10 种有保证的解决方案,可加快慢速 Mac 的运行速度 1.后台运行过多 如果您的 Mac 无法再处理简单的任务,并且您想找到“为什么我的 Mac 这么慢?”...它是这样工作的: 免费下载 CleanMyMac X。 安装并打开应用程序。 转到系统垃圾。 单击扫描。 扫描完成后,单击“清除”按钮以删除垃圾或单击“查看详细信息”以检查将删除哪些文件。...如果您在完成上述工作后仍然问为什么我的 MacBook 这么慢,请确保您的 Mac 已安装所有最新更新。 4....快速修复:管理您的文件和数据 将文件和数据传输到 iCloud 以节省 Mac 上的一些空间。只需点按“存储在 iCloud”并选择要保存到 iCloud 存储的文件。...我们所有人都会下载一开始看起来有用且令人兴奋的应用程序,但结果却使我们的磁盘变得杂乱无章,而不是经常使用。 快速修复:卸载未使用的应用程序 回答“为什么我的 iMac 这么慢?”

    2.8K30

    vue之Cookie

    本地数据可以即时获得。借助浏览器的缓存,整个页面和数据都可以保存在本地,从本地读数据比通过网络从服务器获得数据快得多,可以立即显示网页中的缓存的内容。 数据可以临时存储。...也就是说,使用了本地存储的数据将被持久化保存。 localStorage与sessionStorage的区别 存储数据的生命周期不同。...而sessionStorage的数据保存在内存中,当浏览器关闭后,内存将被自动清除。...当浏览器标签页关闭后,sessionStorage中存储的数据将被自动清除。 如果打开了不同的标签页,即使是同一页面,sessionStorage对象也是不同的。...有效时间:localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据。sessionStorage 数据在页面会话结束时会被清除。

    8000

    优化查询性能(四)

    可以使用此跟踪编号来报告单个查询或多个查询的性能。 在“SQL语句”区域中,输入查询文本。右上角将显示一个X图标。可以使用此图标清除SQL语句区。查询完成后,选择保存查询按钮。...每个查询将被添加到当前保存的Queries表中。 注意,该表可以包含具有相同WRC跟踪号的查询,也可以包含具有不同跟踪号的查询。 完成所有查询后,继续步骤4。...要删除单个查询,请从“当前保存的查询”表中选中这些查询的复选框,然后单击“清除”按钮。 要删除与WRC跟踪编号关联的所有查询,请从当前保存的查询表中选择一行。WRC编号显示在页面顶部的WRC编号区域。...如果您随后单击清除按钮,则对该WRC编号的所有查询都将被删除。 使用查询复选框选择要报告给WRC的查询。要选择与WRC跟踪编号关联的所有查询,请从当前保存的查询表中选择一行,而不是使用复选框。...将出现一个对话框,要求指定保存报告的位置。保存报告后,可以单击Mail to链接将报告发送给WRC客户支持。使用邮件客户端的附加/插入功能附加文件。

    2.7K30

    易犯的Java内存泄漏代码

    未使用的对象取决于应用程序逻辑,因此程序员必须注意业务代码。 内存泄漏可能会以许多方式发生,我将看一些例子。 示例1:自动装箱 ? 你能发现内存泄漏吗? 这里我犯了一个错误。...我们忘记清除缓存,所以尽管应用程序不再需要缓存中的对象,但是它不能被GC回收,因为map对它们有很强的引用。 因此,当您使用自己的缓存时,如果不再需要缓存中的项目,请不要忘记清除它们。...如果它的属性被更改,则该条目将永远不会被应用程序找到,但是map保存一个引用,所以发生内存泄漏。 始终使您的自定义key不变。 示例6:内部数据结构 ? ?...这里我们面临一个棘手的问题,当Stack第一次增长然后收缩。实际上是由于内部的实现。堆栈内部保存一个数组,但是从应用程序的角度来看,Stack的活动部分是指针指向的位置。...过时的引用是不能取消的引用的引用。 该引用不能被GC回收,因为数组包含这些元素,但是在弹出后不必要。 要修复它,我们需要在弹出操作发生时设置空值,以便这些对象能够被GC回收。 ?

    1.7K70

    理解Session State模式+ASP.NET SESSION丢失FAQ

    Q: 不同的应用程序可以把他们的session state保存在同一个SQL Server上的不同数据库中吗? Q: session state在部分浏览器上工作,而在其他一些上不工作。为什么呢?...一个常见的例子是,出于性能考虑,SharePoint应用程序会把这个模块从web.config文件中移除,因此导致session不可用 Q: 为什么session_end没有触发?...Q: 为什么SessionID每一次请求都会改变 A: 如果你的应用程序从未在session state中存储过数据。...而Session.Clear()仅仅是清除数据,但没有删除session。 Q: session的Timeout属性是一个滑动超时值吗?...Q: 不同的应用程序可以把他们的session state保存在同一个SQL Server上的不同数据库中吗? A: 答案是肯定的。

    1.6K20

    JavaScript内存管理介绍

    我想到的下一个问题是:这些东西将被储存在哪里? JS 引擎在两个地方可以存储数据:内存堆和堆栈。堆和堆栈是引擎是用于不同目的的两个数据结构。...实际值仍然是原始值,这就是它们存储在堆栈中的原因。 const hobbies = ['hiking', 'reading']; 数组也是对象,这就是为什么它们存储在堆中的原因。...标记清除 标记清除算法对循环依赖性有解决方案。 它检测到是否可以从root 对象访问它们,而不是简单地计算对给定对象的引用。...clearInterval(intervalId); 被遗忘的回调 假设我们向按钮添加了onclick侦听器,之后该按钮将被删除。旧的浏览器无法收集侦听器,但是如今,这不再是问题。...,我们还需要确保也从数组中删除该元素。

    98620

    redis操作基本命令

    数据一致性: 所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。...多功能实用工具:Redis是一个多实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅),任何短暂的数据,应用程序,如 Web应用程序会话,网页命中计数等。...SET指令: redis> SET key value //如果key值相同则覆盖原值,并且清除原值的保存时间 redis> SETEX key seconds value //添加生存时间...获取列表的长度: redis> LLEN key //如果 key 不存在,返回 0;如果 key 不是列表类型,返回一个错误 让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除: redis...集合中的 member 元素删除 将元素从集合中移除: redis> SREM key member1 member2..

    1.3K00

    GC

    1.概要 这篇文章主要概括的聊一聊GC,大概知道有哪些知识点或使用的时候需要注意什么。讲GC的文章一抓一大把,我就挑几个我个人比较有兴趣的地方分享一下。 1.1什么是GC?...这是一个递归过程,从根开始,沿着引用链一直到达所有可达对象。 清除阶段:在标记阶段之后,GC会遍历堆,将所有未被标记为可达的对象清除(即回收)。这些对象的内存将被释放,以便将来的对象分配。...较老的代际垃圾回收发生得更少,这有助于提高性能,因为大多数对象都是短暂的。 性能考虑:GC的工作会在后台异步进行,以最大程度地减少对应用程序性能的干扰。...选择并发模式或非并发模式取决于应用程序的性能需求和响应时间要求。以下是一些考虑因素: 并发模式适用于: 用户界面应用程序:以确保良好的用户体验,不希望出现长时间的停顿。...数据结构: 根集合(Root Set):这是一组数据结构,用于保存全局变量、本地变量、活动线程的堆栈以及静态对象引用,以便确定哪些对象是可达的。

    24020

    Flink 状态TTL如何限制状态的生命周期

    在文章的其余部分中,我们会介绍一个有状态应用程序示例,该应用程序提取用户登录事件,保存每个用户的最后一次登陆时间,以改善高频访问用户的的体验。 2....在我们存储上次登录时间的应用程序中,为防止对用户隐私进行不必要洞察,永久存储信息是不可接受的。因此,应用程序需要在一段时间后删除该信息。...应用程序必须采取额外的操作并明确删除无用状态以清理存储。按照我们之前存储上次登录时间的示例,一段时间后状态可能就没有必要了,因为稍后用户可能会被视为’不频繁’用户。...由于这种惰性删除方式,永远不会再次访问的过期状态将永远占用存储空间,除非它被垃圾回收。 如果应用程序逻辑没有明确的处理,那么如何删除过期状态呢?一般来说,有不同的策略可以在后台进行删除。...只有当算子从快照重新加载其状态时,即在恢复或从保存点启动时,算子的本地状态才会被清除。由于这些限制,应用程序在 Flink 1.6.0 过期后仍然需要主动删除状态。

    2K10
    领券