平时大家经常使用的应该是第一种方式,第二种方式和第一种方式产生的结果是一样的,实际上操作的都是 APP 沙箱中 Library/Preferences 目录下的以 bundle id 命名的 plist...以防止存取冲突; plist 文件越来越大造成的读写效率问题; 无法便捷的清除由某一个 SDK 创建的 UserDefaults 数据; 针对上述问题,我们可以使用第三种方式,也是本文主要介绍的一种方式...相关问题 UserDefaults的存储范围 因为UserDefaults底层使用的plist文件,所以plist文件支持的数据类型就是UserDefaults的存储范围,其中包括Array、Data...在 UserDefaults 里面最好使用object(forKey:),这是标准用法。 UserDefaults 底层也是使用的 plist 文件,那它和普通的 plist 文件读取有什么区别呢?...UserDefaults 的最终产物 plist 文件进行操作的,但这是有风险的,最好不要这么操作。
前言 NSUserDefaults类,以字典形式保存数据,IOS会自动把字典中的键值对转换成对应的XML文件(也就是plist文件),这个文件会被保存到APP的沙盒目录中(路径为Library/Preferences...NSUserDefaults为我们封装了读写plist文件的常用操作,我们可以使用它来保存一些简单的数据,比如系统配置,用户设置的参数之类的。..., YES) lastObject]; 查看当前沙盒文件 A文件内容 说明:上图中A(Bundle identifier.plist)是系统自动为我们创建的plist文件用来保存我们使用NSUserDefaults...保存的数据。...自己创建的类 是不识别的 。 字典中有 ""这样的数据在使用NSUserDefault储存时会造成崩溃。
所有的非代码文件都要保存在此,例如图像,图标,声音,plist,文本文件等。 沙盒机制保证了 App 的安全性,因为只能访问自己沙盒文件下的文件。...,它返回值为一个数组,在 iOS 中由于只有一个唯一路径,所以直接取数组第一个元素即可。...不应该直接创建偏好设置文件,而是应该使用UserDefaults类来取得和设置应用程序的偏好。 Library/Caches 目录:主要存放缓存文件,此目录下文件不会在应用退出时删除。...通过UserDefaults来设置和读取偏好设置。 偏好设置以key-value的方式进行读写操作。 默认情况下数据自动以plist形式存储在沙盒的Library/Preferences目录。...return currentVersion > localVersion } } 默认值 如果需要在使用时设置 UserDefaults 的默认值,可以使用register方法。
前言 User Defaults 是 Swift 应用程序存储在应用启动之间保持的首选项的首选解决方案。它是由属性列表(plist)文件支持的键-值存储。...介绍 User Defaults 应用程序通常使用 User Defaults 来存储用户的首选项。你可以存储首选项,例如用户最喜欢的股票或保存特定用户状态,例如“用户已看到引导”。...") } 现在,你可以通过使用静态属性来访问共享的组容器: UserDefaults.group.set(["AAPL", "TSLA"], forKey: "favorite-stocks") 任何使用相同应用组的应用程序或扩展现在都可以读取和写入最喜欢的股票...User Defaults 支持以下类型: 数据 字符串 数字(NSNumber) 日期 数组 字典 布尔值 如果你的类型不在此列表中,你需要找到一种将其转换为任何受支持类型的方法。...你可以通过单击执行按钮并选择 User Defaults plist 文件来打开编辑器。
iOS中NSUserDefaults详解 NSUserDefaults是用于保存应用程序设置,应用信息等轻量级数据的的一个类,其本质是将数据写为plist文件的形式保存在本地。...; 这个方法用于将默认的UserDefaults释放掉,并在下次使用时创建一个新的对象,需要注意的是,调用这个方法后,对原UserDefaults单例进行的KVO监听将失效。...- (NSDictionary *)dictionaryForKey:(NSString *)defaultName; 获取字典数据 - (NSData *)dataForKey:(NSString...forKey:(NSString *)defaultName; - (void)registerDefaults:(NSDictionary *)registrationDictionary; 这个方法可以通过字典对数据表进行赋值...@property (readonly, copy) NSArray *volatileDomainNames; 返回一个数组,其中是所有不稳定域的名字 - (NSDictionary *)volatileDomainForName
2.1 plist文件(属性列表) plist文件是将某些特定的类,通过XML文件的方式保存在目录中。...一般plist中的内容都是以NSArray或NSDictionary的形式保存。...注意 只有以上列出的类型才能使用plist文件存储。 存储时使用writeToFile: atomically:方法。...所以如果需要立即写入文件的就必须调用synchronize方法。 偏好设置会将所有数据保存到同一个文件中。即preference目录下的一个以此应用包名来命名的plist文件。...,其实就是自己在沙盒的某一个指定路径(第一部分介绍了沙盒各目录路径的获取方式)下新建一个保存数据的文件(.txt、.plist、.data等格式的文件),然后向其中写我们需要保存的数据即可。
该篇文章是 iOS 持久化方系列的第二篇文章,第一篇请见UserDefaults 浅析及其使用管理。...关键目录解读 虽然上述目录结构下的子目录比较多,但是有很大一部分是供系统使用,下面我们了解一下几个比较关键的目录。...Library/Preference 保存应用的所有偏好设置。如果看过上篇文章,应该就会记得UserDefaults生成的plist文件就会保存该目录下。 iTunes、iCloud 会备份该目录。...子目录Library/Preferences,默认没有该目录,当创建 group 的 UserDefaults 时会创建该目录,UserDefaults 对应 plist 的名称为 group 名称;...,而是使用UserDefaults等形式进行操作。
平时我们经常会采用 NSUserDefaults 或者 Plist 来存储数据到设备,这样即使 App 被关闭,下次再打开的时候数据还在。...这里我写了两个函数来供大家使用,一个用来存数据,一个用来读数据。...// MARK: - Store enum StoreType { case userDefaults case plist } func setContentToDevice (content...但是要注意,在这里 NSUserDefaults 只支持存储 NSArray、NSString 等基本类型,如果你要存储自定义类型的实例,必须使用 StoreType.plist 进行存储。...下面给出使用这个函数的范例:(其中 Hero 是我自定义的类) let arr = [1,2,3,4,5] setContentToDevice(arr, key: "testArr", type: .
在工程中配置APP ID和描述文件因为历史原因,工程中的编译环境较多,而且没有采用自动管理,所以需要配置的地方比较多分别配置Debug和Release的Bundle Indentifier和Provisioning...Group ID为红色,但证书和描述文件正确即可正常使用。...图片修改构建脚本读取的plist目前构建读取描述文件时使用的是工程中新建的plist文件,因此新增target后需要在plist中添加描述文件,至此工程配置已全部修改完毕。)图片5....数据传递在主App里写入数据到UserDefaults中,在widget中读取数据/// 在主App中写入数据到UserDefaults中 NSString *suiteName =...= [[NSUserDefaults alloc] initWithSuiteName:suiteName];[userDefaults setObject:data forKey:dataKey];
这些值的数组和字典也很容易想到:一个字符串,然后是另一个,然后是第三个,依此类推。...我们将在未来的项目中更多地研究Codable,但是目前我们的需求很简单:我们想要归档一个自定义类型,以便可以将其放入UserDefaults中,然后在从UserDefaults中返回时将其取消存档。...当使用仅具有简单属性的类型(字符串,整数,布尔值,字符串数组等)时,支持归档和取消归档的唯一需要做的就是向Codable添加一致性,如下所示: struct User: Codable { var...该名称暗示它特定于JavaScript,但实际上,我们都使用它,因为它是如此的快速和简单。 Codable协议不需要我们使用JSON,实际上可以使用其他格式,但这是迄今为止最常见的格式。...,并将其保存到UserDefaults中,如下所示: Button("Save User") { let encoder = JSONEncoder() if let data = try
一、iOS数据持久化方式 (1)XML属性列表(plist)归档 (2)Preference(偏好设置),本质还是通过“plist”来存储数据, 但是使用更简单(无需关注文件、文件夹路径和名称) (...、打印沙盒路径 NSLog(@"%@",NSHomeDirectory()); 2、使用Documents目录进行数据持久化的保存,我们平时操作数据主要使用Documents目录 NSString *path...(); Library/Caches: 保存临时文件,后续需要使用,例如:缓存图片,离线数据(地图数据) 系统不会清理cache目录中的文件 就要求程序开发时,必须提供cache目录的清理解决方案...路径获取: 通过NSUserDefaults类存取该目录下的设置信息 ---- 三、使用方法 1、属性列表 属性列表是一种XML格式的文件,拓展名为plist,如果对象是NSString、NSDictionary...、NSArray、NSData、NSNumber等类型,就可以使用, 注意:不能存储自定义对象,会失败的 存方法:writeToFile 读方法:如字典, dictionaryWithContentsOfFile
该函数首先获取项目中的Info.plist文件路径,并将其读取为NSMutableDictionary类型的字典。...然后,我们使用setValue方法将新的Bundle Identifier值设置为字典中的CFBundleIdentifier键对应的值。...最后,我们使用write方法将修改后的字典写入Info.plist文件。...每个iOS应用程序都必须使用不同的Bundle Identifier,以确保其在设备上的唯一性。...数据持久性:在应用程序中使用Bundle Identifier来创建文件路径或使用UserDefaults存储数据时,可以确保数据不会与其他应用程序冲突。
NSUbiquitousKeyValueStore 在大多数场合下表现的同 UserDefaults 十分类似: •都是基于键值存储•只能使用字符串作为键•可以使用任意属性列表对象(Property list...object types)作为值•使用类似的读取和写入方法•都是率先将数据保存在内存中,系统会择机对内存数据进行持久化(此过程开发者通常无需干预) 即使你没有使用过 UserDefaults,只需花几分钟阅读一下...同 UserDefaults 之间的不同 •NSUbiquitousKeyValueStore 不提供注册默认值的方法使用 UserDefaults 时,开发者可以使用 register(defaults...有更多的限制苹果并不推荐使用 NSUbiquitousKeyValueStore 保存数据量大、变化频繁且对 app 运行至关重要的数据。...获取其他 app 的 iCloud Key-value Store 最方便的方法是,在 plist 添加值为(TeamIdentifierPrefix)(CFBundleIdentifier)的键,通过
要实现一个 Widget,需要给应用添加一个 Widget 扩展并只能使用 SwiftUI 来实现 Widget 的内容。...此时会生成一个新文件夹,包含以下内容 扩展名.swift 扩展名.intentdefinition Assets.xcassets Info.plist 数据共享 可以通过网络和本地数据两种方式进行数据的共享...实现 配置完成以后,可以通过UserDefaults或FileManager来实现 App 与 Widget 的数据共享,这里以UserDefaults为例,因为 SwiftUI 提供了@AppStorage...")) // 然后在后面保存数据 Widget @AppStorage("contact", store: UserDefaults(suiteName: "group.cn.abc.yf.SwiftUI-Widget...,需要使用 SwiftUI 构建,可以针对不同尺寸的 Widget 设置不同的 View。
要实现一个 Widget,需要给应用添加一个 Widget 扩展并只能使用 SwiftUI 来实现 Widget 的内容。...此时会生成一个新文件夹,包含以下内容 扩展名.swift 扩展名.intentdefinition Assets.xcassets Info.plist 数据共享 App 与 Widget 可以通过网络数据和本地数据两种方式进行数据的共享...实现 配置完成以后,可以通过UserDefaults或FileManager来实现 App 与 Widget 的数据共享,这里以UserDefaults为例,因为 SwiftUI 提供了@AppStorage...")) // 然后在后面保存数据 Widget @AppStorage("contact", store: UserDefaults(suiteName: "group.cn.abc.yf.SwiftUI-Widget...,后面的数据刷新都会在其中完成,所以可能会在其中完成最新的网络数据和本地数据的获取,然后转成 Model 以供使用。
启动图名字生成第二篇 我们写一下配置启动图名字的页面保存按钮的逻辑 @IBAction func saveAction(_ sender: Any) { for index in 0.....类里面写一个保存我们启动图名字的方法。.../// 保存自定配置的启动图的名称 /// /// - Parameter list: 启动图名称的列表 func saveLaunchNames(list:[String]) { let userDefaults...() } /// 读取保存的启动图的名称列表 /// /// - Returns: 字符串数组 可能读取不出来 func readLaunchNames() -> [String]?...[String] } 我们在点击保存按钮之后让执行保存的方法还有消失试图 SFileManger.saveLaunchNames(list: promptValues) self.dismiss(nil
---- plist 这就是我们平时说的Plist文件了,先说下它支持的数据格式。 首先Plist文件支持两种数据格式作为容器,Array及Dictionary。...容器内可以盛放的数据类型主要有Boolean/Data/Date/Number/String。 使用的时候主要是从bundle或者沙盒中读取文件为数组或者字典后取数据。...存储的时候也是数组或者字典保存在文件系统中,示例代码如下: ///读取 NSString * path = [[NSBundle mainBundle] pathForResource:@"Info"...,saveP); Plist的优势呢在于读取和保存过程相对简单,支持的数据类型基本满足需要。...他的使用方法上跟字典差不多,不过它提供了一些对泛型的支持,示例代码如下: [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"male
城市选择器,借助于UIPickerView来实现,第一列为省份,第二列为第一列省份对应的城市或者区,数据放在plist中,plist结构如下图所示,第一层是一个Dictionary,每个省份对应的城市是一个...() /** * plist对应的字典 */ @property (nonatomic, strong...* * @return plist对应的字典 */ - (NSDictionary*)cityNames { if (_cityNames == nil) { NSString...dictionaryWithContentsOfFile:path]; } return _cityNames; } /** * 懒加载省份 * * @return 省份对应的数组...*/ - (NSArray*)provinces { if (_provinces == nil) { //将省份保存到数组中 但是字典保存的是无序的 所以读出来的省份也是无序的
00000.gif 百度定位 定位的代码实际很简单,注册百度地图 APPKEY,对应项目的 Bundel id,详见百度地图API吧, 百度地图开发文档 分析:我们使用的时百度的定位功能,要展示给用户一个位置信息...自iOS8起,系统定位功能进行了升级,SDK为了实现最新的适配,自v2.5.0起也做了相应的修改,开发者在使用定位功能之前,需要在info.plist里添加(以下二选一,两个都添加默认使用NSLocationWhenInUseUsageDescription...): NSLocationWhenInUseUsageDescription ,允许在前台使用时获取GPS的描述 NSLocationAlwaysUsageDescription ,允许永久使用GPS...gif中看到了,可能gif是个帧动画,感觉这个很不流畅,像一个一个数字蹦一样,就在我写文章的时候,还有个哥们说,你这很卡啊,计算label的长度,和数组一起变化,其实这个不用担心的,label的宽度是使用的...Masonry,比较省心,数字的渐变是使用的POP动画实现代码如下: GDScrollLabel.h文件 // // GDScrollLabel.h // GD_XiaoQ // // Created
领取专属 10元无门槛券
手把手带您无忧上云