iOS中的数据持久化方式有4种:
- plist属性列表
- 对象归档
- SQLite3
- Core Data
Plist
plist文件主要是以键值对的方式存储属性、配置信息,也可以用于存储项目中的业务数据。我们常用的UserDefaults类其实也是用plist文件进行存储的。
解析Plist
//组织plist文件地址
let configPlistPath : String = Bundle.main.path(forResource: "bomsConfig", ofType: "plist")!
//通过文件地址获得字典
let configDictionary : NSDictionary = NSDictionary.init(contentsOfFile: configPlistPath)!
//通过字典键值对获取
let locationVersion : NSNumber = configDictionary["version"] as! NSNumber
locationMSVersion = locationVersion
将信息写入Plist
//组织plist文件地址
let configPlistPath : String = Bundle.main.path(forResource: "bomsConfig", ofType: "plist")!
//通过文件地址获得字典
let configDictionary : NSMutableDictionary = NSMutableDictionary.init(contentsOfFile: configPlistPath)!
//更改版本号
configDictionary.setObject(onlineMSVersion, forKey: "versionMS" as NSCopying)
//将更改过的字典重新写入文件中
configDictionary.write(toFile: configPlistPath, atomically: true)
Core Data
Core Data 是一种 ORM Object Relationships Mapping 对象关系映射的解决方案。能够将对象转化成数据保存在SQLite数据库文件中,也能够将数据库中的数据还原成对象。而程序员能够很少地去编写数据库语句,就能够完成数据库相关的操作,节省很多的精力和时间。
与SQLite区别:只能取出整个实体记录,然后分解,之后才能得到实体的某个属性。
CoreData具有以下的特点:
- 使用可视化界面编辑数据模型
- 多种文件格式保存数据
- 对象特性的有效性验证
- 可查询、排序数据
- 数据延迟加载
- 与视图控制器和View紧密交互
- 通过提交、撤销等管理相关对象的变化
常用的操作:
- 建立数据模型
- 填充起始数据
- 使用取回结果控制器在表视图中展示数据
- 获取数据
- 查询数据
- … …
Core Data 的一些概念
Core Data 的框架中包含 Fetch Request 数据查询请求、ManagedObjectContext 托管对象上下文、Managed Objects 托管对象、Persistent Store Coordinate 持续化存储协调器 和 Persistent Store 持久化存储 等概念。
Fetch Request 数据查询请求
使用托管对象上下文来检索数据时,会创建一个获取请求 Fetch Request 。最简单的获取请求必须指定一个实体的名称,也可以包括一个谓词对象,通过谓词设置查询对象必须符合的查询条件。
发送获取请求给托管对象上下文,它将从与持久化存储相关联的数据源中返回匹配请求的对象。
相关数据库专业术语解释:
托管对象上下文:相当于MVC里面的控制器吧
谓词:就是函数,返回true、false、null三种情况。
ManagedObjectContext 托管对象上下文
当从持久化存储中获取托管对象时,这些对象的临时副本会在上下文中形成一个对象图,即对象与对象之间的联系,然后便可以任意修改这些对象了。
可以在应用程序中使用多个上下文,对于持久化存储中的每一个对象,只有唯一一个托管对象和给定的上下文相关联。Core Data大多数交互都是通过托管上下文来实现的。
数据库的大多数操作是在这个类操作。
Managed Objects 托管对象
Core Data框架中的托管对象是一种含有应用程序数据的对象类型,提供对数据的访问并实现逻辑来处理数据。
所有托管对象都必须通过 ManagedObjectContext 托管对象上下文进行注册。当准备好保存对托管对象所做的修改时,托管对象上下文负责确保那些对象处于正确的状态。
其中 Core Data 里面的托管对象都会继承此类。
Persistent Store Coordinate 持续化存储协调器
NSPersistentStoreCoordinator相当于数据库与数据模型之间的桥接器,通过NSPersistentStoreCoordinator将数据模型存入数据库。
持久化存储协调器为一个或多个托管对象上下文提供一个访问接口,使其下层的多个持久化存储器可以表现为一个聚合存储。
主要负责协调上下文与存储的区域的关系。
Persistent Store 持久化存储
一个特定的持久化对象是与单个文件或者其他外部数据存储相关联的,负责存储中的数据和托管对象上下文中的对象之间的映射。Core Data支持4中类型的持久化数据存储方式:SQLiteStore、XMLStore、BinaryStore、InMemoryStore。
搭建Core Data
如果是新建项目的话,在创建项目的时候,选择勾选Use Core Data就行了。
要是对已有的项目添加 Core Data 的话,就需遵循以下步骤:
- 在项目配置中添加 Core Data 框架。
- 创建 .xcdatamodeld 文件
- 然后新开一个项目,创建的时候勾选Use Core Data,观察新项目的AppDelegate.Swift文件里有什么差异,将其差异复制到我们的项目中。比如,需要import Core Data 框架,还有Core Data相关的一些函数处理等等。