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

73010

Swift 中 User Defaults 读取和写入

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

25720

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

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

5.4K20

Ask Apple 2022 中与 Core Data 有关问答

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

2.8K20

JavaScript LocalStorage 完整指南

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

2.1K10

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

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

3.2K30

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

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

61600

UserDefaults 浅析及其使用管理

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

1K10

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

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

88910

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

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

39920

为什么 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

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

1.5K20

JavaScript内存管理介绍

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

97120

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.1K31

GC

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

22220

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

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

1.8K10

Golang 防止路径遍历漏洞

/another_bucket/super_important_file.txt 如果不对用于输入路径进行过滤,那么上面的请求路径将被路由到其他桶,导致重要数据泄露。...比如文件上传功能:当应用程序允许用户上传文件时,攻击者可以通过修改文件名或文件路径方式,将文件保存在系统中其他目录中,甚至可以上传恶意文件,导致系统被攻击。...为了防止路径遍历攻击,应用程序可以采取以下措施: 对用户上传文件进行检查和验证,限制上传文件类型和大小,以及检查文件名和路径,确保它们包含恶意代码。...攻击者可以在应用程序之外创建、修改或删除文件,例如在 Web 根目录下创建恶意文件、删除应用程序文件等。 攻击者可以绕过应用程序安全控制,例如上传恶意文件、执行远程命令等。...这些攻击可能导致数据泄露、数据破坏、服务拒绝等严重后果,严重影响应用程序可用性、完整性和机密性。

1K20
领券