前言
我们在之前的两篇里面实现了一个十分简陋的通讯录,而且都是通过系统默认的方式创建的CoreData。可是实际中哪里有那么好的事情嘛,要是忘记在创建工程的时候勾选了下面这个图怎么办?

难道我们要把工程删除,再重新创建嘛?很多时候再开始工程的时候并特么的不知道需要用到数据库啊。更多的时候已经都开始敲代码了,连需求文档都还木有拿到手里,PM只会轻轻的说一句:设计图不是已经有了嘛,先画UI吧。
所以,CoreData Stack是为了解决这个问题诞生的嘛?很遗憾,并不是。看了前面的两篇文章之后,有木有觉得CoreData不怎么好用,还挺麻烦的呐?这时候要祭出CoreData Stack的啦。
1. CoreData Stack的作用
其实这个东西在一篇的时候提到过,不信您看:Swift实践:使用CoreData完成一个通讯录存储
一个基本的 Core Data 栈由四个主要部分组成:托管对象 (NSManagedObject),托管对象上下文 (NSManagedObjectContext),持久化存储协调器 (NSPersistentStoreCoordinator),以及持久化存储 (NSPersistentStore)。
CoreDataStack,是自定义的一个CoreData 的栈对象,可以通过它,初始化项目的CoreData,以及获取到Context,对数据库进行增删改查等操作。
2.创建 CoreData Stack
非典型技术宅既然说了这货有四部分组成,那咱们就一个一个来呗。艾玛,因为发现文章会被抄袭,抄袭之后有些人还不署名,搞的只好在文章里面内嵌入一些自己的名字。心酸~~~~
2.1 iOS9
在iOS9中,CoreData Stack的三个核心类是这样的:
-管理对象上下文NSManagedObjectContext
对象模型NSManagedObjectModel 存储调度器NSPersistentStoreCoordinator这个时候存储是在Documents中间。
2.2 iOS10之后
iOS10之后就有点不一样了, 增加了一个叫做NSPersistentContainer的东西。这个玩意儿作用就是用来管理CoreData Stack,为了能够让大家用起来更爽、更简单。
需要说明的是,NSPersistentContainer 一点都没有向下兼容的意思,完全不兼容iOS9.0,如果非要在iOS9.0里面使用,会直接闪退。
这个时候存储是在Library->Application Support中。
2.3 来吧,开始创建吧
宅胖这么懒,怎么还可能再写一个兼容iOS9.0的呐,想太多了~~~哈哈!所以,俺们只写iOS10.0以后的。写到这个时候,连版本号都已经写烦了。
Step1:搞一个NSPersistentContainer出来 Step2:创建CoreData Stack Step3:别忘了还有一个NSManagedObjectContext Step4:提供一个保存数据的方法 Step5:最后别忘记了在AppDelegate.swift/292073.html">swift里面应用一下,不然不是白搞了半天嘛







