Swift-Core Data(2) 基础存储

Swift-Core Data(1) 基础存储
Swift-Core Data(2) 基础存储

上一篇简单的写了点存储和查询功能,这篇写一下当你的项目没有勾选 Use Core Data 怎么办?

1.创建数据库模板

数据库模板.png

如上图创建一个数据库模板,创建好之后,安装上一篇文章创建 entity 和他的属性。
然后选择手动生成或者自动生成相应的实体类代码,系统默认是自动生成的,全凭个人所好。

生成相应的实体类代码

2.创建 Core Data Stack

一个基本的 Core Data Stack由四个主要部分组成:托管对象 (NSManagedObject),托管对象上下文 (NSManagedObjectContext),持久化存储协调器 (NSPersistentStoreCoordinator),以及持久化存储 (NSPersistentStore)。

CoreDataStack,是自定义的一个CoreData 的栈对象,可以通过它,初始化项目的CoreData,以及获取到Context,对数据库进行增删改查等操作。

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 创建 ios 10 的CoreData Stack

创建CoreData Stack有两种方式:

1.创建个新项目,是勾选了 Core Data 的,然后将AppDelegate.swift 中有关的 Core Data 的代码复制粘贴过来,就可以使用了

注意:一定要将let container = NSPersistentContainer(name: "") 中的 name 参数改成你自己创建的数据库模板的名字

2.创建个类实现CoreData Stack
  • Step1: 创建NSPersistentContainer
  • Step2: 创建CoreData Stack
  • Step3: 别忘了还有一个NSManagedObjectContext
  • Step4: 提供一个保存数据的方法
  • Step5: 在AppDelegate.swift里面初始化一下CoreDataStack
CoreDataStack.swift

class CoreDataStack {
    //数据库模板名字
    private let modelName: String
    
    init(modelName: String) {
        //初始化模板
        self.modelName = modelName
    }
    
    //懒加载 持久化存储协调器 NSPersistenStoreCoordinator
    lazy var storeContainer: NSPersistentContainer = {
        
        let container = NSPersistentContainer(name: self.modelName)
        
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                debugPrint("Unclear error\(error)")
            }
        })
        return container
    }()
    
    //懒加载 托管对象
    lazy var managedContext: NSManagedObjectContext = {
        return self.storeContainer.viewContext
    }()
    
    //数据库保存数据的方法
    func saveContext() {
        guard managedContext.hasChanges else { return }
        do {
            try managedContext.save()
        } catch let error as NSError {
            debugPrint("Unclear error\(error)")
        }
        
    }
}

AppDelegate.swift 里面初始化

AppDelegate.swift

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var managedContext: NSManagedObjectContext!
    lazy var coreDataStack = CoreDataStack(modelName: "PersonCoreData")
    
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        self.managedContext = coreDataStack.managedContext
        return true
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。