首页
学习
活动
专区
工具
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.

75110

Swift 中 User Defaults 读取和写入

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

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

    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.2K10

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

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

    3.2K30

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

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

    62700

    UserDefaults 浅析及其使用管理

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

    1.1K10

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

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

    92010

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

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

    42620

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

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

    2.7K30

    优化查询性能(四)

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

    2.7K30

    理解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: sessionTimeout属性是一个滑动超时值吗?...Q: 不同应用程序可以把他们session state保存在同一个SQL Server上不同数据库中吗? A: 答案是肯定

    1.6K20

    易犯Java内存泄漏代码

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

    1.7K70

    JavaScript内存管理介绍

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

    98520

    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

    Android应用实现安装自启动方法

    一个新版本应用安装到设备,替换之前已经存在版本 ACTION_PACKAGE_CHANGED 一个已存在应用程序包已经改变,包括包名 ACTION_PACKAGE_REMOVED 一个已存在应用程序包已经设备上移除...) ACTION_PACKAGE_DATA_CLEARED 用户已经清除一个包数据,包括包名(清除包程序不能接收到这个广播) 直接思路:注册广播接收以上需要action来实现。...Andriod3.1开始,系统包管理服务会一直追踪处于停滞状态app,并提供了控制它们后台进程或其他应用程序启动方法。 注意:应用程序停止状态不同于activity(活动)停止状态。...一个后台service服务或app应用程序可以 通过向广播Intent对象添加FLAG_INCLUDE_STOPPED_PACKAGES标志,覆盖重写这个行为,使得该广播可以激活处于停止状态应用程序...,因为该app未运行过) 2、在app项目中使用静态注册广播(因为动态广播是app运行才可以接受到) 3、app曾经运行过(即处于stopped状态) 在Android5.1真机上测试: 初次安装

    4.3K31

    GC

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

    23820

    如何保证缓存和数据一致性?

    流程虽然简单,但是却引伸出来两个问题: 为什么删除旧缓存而不是更新旧缓存? 为什么不先删除缓存,然后再更新数据库? 我们来分别回答这两个问题。 为什么删除旧缓存而不是更新旧缓存?...那么此时,缓存中保存数据就是不正确,而如果采用了删除缓存方式,就不会发生这种问题了。 为什么不先删除缓存,然后再更新数据库?...先删除缓存再更新数据库:当请求 A 执行清除缓存,还未进行数据库更新,此时请求 B 进行查询,查到了旧数据并写入了 Cache。...2.4 如何确保原子性 但是更新数据库和删除缓存毕竟不是一个原子操作,要是数据库更新完毕删除缓存失败了咋办? 对于这种情况,一种常见解决方案就是使用消息中间件来实现删除重试。...,相当于把缓存相关代码应用程序中剥离出来了,应用程序只需要专注于业务就行了。

    44910

    NodeJS有难度面试题(8000字长文)

    活对象在新生代中只占小部分,死对象在老生代中只占较小部分,这是为什么采用标记清除算法原因。 3.3.3 标记清楚算法问题 主要问题是每一次进行标记清除回收,内存空间会出现连续状态 ?...协议即将被更改,更改协议就是Upgrade: websocket指定WebSocket协议。...API,有很多新发现,比如说: fs.watch这个模块,事件回调函数有一个参数是触发事件名称,但是呢,无论增删改,都是触发rename事件(如果更改是update事件,删除delete事件,重命名是...os,操作系统相关基础,io流程是什么(硬盘里读取数据到内核内存中,然后内核内存将数据传入到调用io应用程序进程内存中),冯诺依曼体系是什么,进程和线程区别等等(最近在看马哥linux教程...,因为自己不是科班出身,听了很多基础计算机知识,受益匪浅,建议去bilibili看) linux相关操作知识(node涉及到后台,虽然是做中台,涉及数据库,但是基本linux操作还是要会) node

    3.9K21
    领券