iOS - Swift PList 数据存储
前言
直接将数据写在代码里面,不是一种合理的做法。如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低。因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据。如果要变动数据,直接修改数据文件即可,不用修改代码。一般可以使用属性列表文件存储 NSArray 或者 NSDictionary 之类的数据,这种 “属性列表文件” 的扩展名是 plist,因此也称为 “plist 文件”。 plist 是以 xml 文件形式存储的。
如果对象是 NSString、NSArray、NSDictionary、NSData 和 NSNumber 类型,可以用这些类中实现的 writeToFile: atomically: 方法将数据写到文件中。
当根据字典创建属性列表时,字典中的键必须都是 NSString 对象。数组中的元素或字典中的值可以是 NSString、NSArray、NSDictionary、NSData、NSDate 和 NSNumber 对象。
iOS 实现的序列化方式的两种:NSKeyedArchiver,NSPropertyListSerialization。在这两种序列化方式中,NSData 都是序列化的目标。两种方式的不同点在于 NSPropertyListSerialization 是针对数组和字典类型的,而 NSKeyedArchiver 是针对对象的。
1、Write 写入方式
永久保存在磁盘中。具体方法为:
第一步:获得文件即将保存的路径:
使用 C 函数 NSSearchPathForDirectoriesInDomains 来获得沙盒中目录的全路径。该函数有三个参数,目录类型、domain mask、布尔值。其中布尔值表示是否需要通过 ~ 扩展路径。而且第一个参数是不变的,即为 NSSearchPathDirectory 。在 iOS 中后两个参数也是不变的,即为:.DocumentDirectory 和 true。
let documentPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
还有一种方法是使用 NSHomeDirectory 函数获得 sandbox 的路径,但是不能在 sandbox 的本文件层上写文件也不能创建目录,而应该是此基础上创建一个新的可写的目录,例如 Documents, Library 或者 temp 。具体的用法为:
// 将 Documents 添加到 sandbox 路径上
let documentPath = NSHomeDirectory().stringByAppendingString("/Documents")
这两者的区别就是:使用 NSSearchPathForDirectoriesInDomains 比在 NSHomeDirectory 后面添加 Documents 更加安全。因为该文件目录可能在未来发送的系统上发生改变。
第二步:生成在该路径下的文件:
// fileName 就是保存文件的文件名
let FileName = documentPath.stringByAppendingString("/fileName") ```第三步:往文件中写入数据:
// 将 NSData 类型对象 data 写入文件,文件名为 FileName
data.writeToFile(FileName, atomically: true)
第四步:从文件中读出数据:
// 从 FileName 中读取出数据
let data = try? NSData(contentsOfFile: FileName, options: NSDataReadingOptions(rawValue: 0))
2、Plist 文件的读写
let arrayPath:String = NSHomeDirectory().stringByAppendingString("/Desktop/arrayToPList.plist")
let dictionaryPath:String = NSHomeDirectory().stringByAppendingString("/Desktop/dictionaryToPList.plist")
// 待写入数据
let array:NSArray = ["bei", "jing", "huan", "ying", "nin"]
// 待写入数据
let dictionary:NSDictionary = ["name":"chen chao", "age":"18", "info":"Good Teacher"]
// 写 Plist 文件
// 数组写入 plist 文件
let bl1:Bool = array.writeToFile(arrayPath, atomically: true)
// 字典写入 plist 文件
let bl2:Bool = dictionary.writeToFile(dictionaryPath, atomically:true)
// 读 Plist 文件
let arrayFromPlist:NSArray? = NSArray(contentsOfFile: arrayPath)
let dicFromPList:NSDictionary? = NSDictionary(contentsOfFile: dictionaryPath)
3、Plist 序列化
let arrayPath:String = NSHomeDirectory().stringByAppendingString("/Desktop/arrayPropertyList.plist")
let dictionaryPath:String = NSHomeDirectory().stringByAppendingString("/Desktop/dictionaryPropertyList.plist")
// 待写入数据
let array:NSArray = ["bei", "jing", "huan", "ying", "nin"]
// 待写入数据
let dictionary:NSDictionary = ["name":"chen chao", "age":"18", "info":"Good Teacher"]
// 序列化,将数据转换成 XML 格式的文件
let arrayData:NSData = try! NSPropertyListSerialization.dataWithPropertyList(array,
format: .XMLFormat_v1_0,
options: 0)
let dictionaryData:NSData = try! NSPropertyListSerialization.dataWithPropertyList(dictionary,
format: .XMLFormat_v1_0,
options: 0)
// 输出到 .txt 格式文件中
let bl1:Bool = arrayData.writeToFile(arrayPath, atomically: true)
let bl2:Bool = dictionaryData.writeToFile(dictionaryPath, atomically:true)
// 反序列化
let arrayFromeFile:NSArray = NSArray(contentsOfFile: arrayPath)!
let dicitionaryFromeFile:NSDictionary = NSDictionary(contentsOfFile: dictionaryPath)!
4、Plist 文件的使用
4.1 Plist 文件的创建

4.2 Plist 文件的解析
// 获得 Plist 文件的全路径
let path = NSBundle.mainBundle.pathForResource(@"shops", ofType:@"plist")
// 加载 plist 文件
let shops:NSArray? = NSArray(contentsOfFile: path)
4.3 Plist 文件的解析过程

4.4 Plist 的使用注意
plist 的文件名不能叫做 “info”、“Info” 之类的。
添加 plist 等文件资源的时候,一定要勾选下面的选项。

iOS - Swift PList 数据存储的更多相关文章
- iOS - Swift NSUserDefaults 数据存储
前言 public class NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefault ...
- iOS - OC PList 数据存储
前言 直接将数据写在代码里面,不是一种合理的做法.如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低.因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据.如 ...
- 李洪强iOS开发之数据存储
李洪强iOS开发之数据存储 iOS应用数据存储的常用方式 1.lXML属性列表(plist)归档 2.lPreference(偏好设置) 3.lNSKeyedArchiver归档(NSCoding) ...
- ios中常见数据存储方式以及SQLite常用的语句
在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults 将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...
- ios开发之数据存储
iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data 应用沙盒 ...
- iOS学习笔记--数据存储
iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data 1. XM ...
- iOS - OC NSUserDefaults 数据存储
前言 @interface NSUserDefaults : NSObject 用来保存应用程序设置和属性.用户保存的数据.用户再次打开程序或开机后这些数据仍然存在.如果往 userDefaults ...
- IOS中的数据存储方式,特点,使用情况
数据存储的核心都是写文件,主要有四种持久化方式:属性列表(Plist),对象序列化,SQLite数据库,CoreData. 存储Plist: 键值进行存储,不能存储对象.对象需要序列化编码才能写入文件 ...
- iOS中的数据存储
SQLite3 SQLite3是一款开源的嵌入式关系型数据库,可移植性好,易使用,内存开销小. SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中. SQLite3常用的4种 ...
随机推荐
- https笔记
TCP提供了可靠的,面向连接的字节流服务. 1)应用数据分割成TCP认为适合发送的数据块,通过MSS(最大数据包长度)来控制. 2)重传机制 3)对首部和数据进行校验 4)TCP对收到的数据进行排序, ...
- WKWebView与Js实战(OC版)
前言 上一篇专门讲解了WKWebView相关的所有类.代理的所有API.那么本篇讲些什么呢?当然是实战了! 本篇文章教大家如何使用WKWebView去实现常用的一些API操作.当然,也会有如何与JS交 ...
- PHP array_column() 函数
定义和用法 array_column() 返回输入数组中某个单一列的值. array_column(array,column_key,index_key); 参数 描述 array 必需.规定要使用的 ...
- 在Ecshop后台打印订单页面将商品按货号排序
ECSHOP后台管理里的“打印订单" 页面里的商品排序有点乱,现在想改成按序号来排序,修改方法如下 下面是在2.7.2基础上做的修改 打开 admin/order.php 文件 找到(大约 ...
- 【转】MYSQL入门学习之九:索引的简单操作
转载地址:http://www.2cto.com/database/201212/176772.html 一.创建索引 www.2cto.com MYSQL常用的索引类型主要有以 ...
- YTU 3006: 迷宫问题(栈与队列)
3006: 迷宫问题(栈与队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 1 题目描述 编写一个求解迷宫问题的程序,要求输出迷宫的所有路径,并求最短路径长度及最短路径 ...
- YTU 3001: 判断操作是否合法(栈和队列)
3001: 判断操作是否合法(栈和队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 4 解决: 2 题目描述 假设以I和O分别表示进栈和出栈操作,栈的初态和终态均为空,进栈和出栈的 ...
- c#之线程
//Process[] pro= Process.GetProcesses(); //foreach (var item in pro) //{ // Console.WriteLine(item); ...
- 20150618_Andriod_设置TextView垂直滚动
布局文件 android:scrollbars="vertical" android:singleLine="false" 代码文件 ctl_tv_conten ...
- Python静态方法的使用
class Util(): @staticmethod def Func1(): print "Execute Func1!" def main(): Util.Func1()