Swift 4

Swift-Core Data(1) 基础存储

2017-12-18  本文已影响0人  村雨灬龑

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

最近有做个小 demo,有使用到 Core Data,才开始研究一下,把感觉比较有用的资料整理了一下。

1. Core Data 架构

一个基本的 Core Data 栈由四个主要部分组成:

1.1NSManagedObjectContext (托管对象上下文 )

日常打交道的都是这个。其他三个在数据迁移的时候才会看到。
作用:插入数据,查询数据,删除数据

1.2NSManagedObject(托管对象)

是我们的数据模型,也就是我们存储的对象。这些对象都保存在NSManagedObjectContext中,每个存储对象都知道自己对应哪个上下文。
作用:添加实体的属性,建立属性之间的关系

1.3NSPersistenStoreCoordinator (持久化存储协调器)

是模型和存储数据库之间的桥梁,负责两者之间最复杂的细节隐藏。
作用:设置数据存储的名字,位置,存储方式,和存储时机

1.4 NSPersistentStore(持久化存储)

Core Data 提供了四种类型,SQLite, Binary, XML, and In-Memory。在iOS的XML存储不可用,这些都是在持久存储的特征描述。所有的数据都存在这里。

Core Data 架构.png

2.创建一个Core Data Demo

1.创建项目

创建 CoreData Demo.png

在 Xcode 创建工程时,提供了创建 CoreData 的模板,只需要我们在创建时,勾选 CoreData 选项,Xcode 就会自动创建出数据模型文件。

这个Demo用这个创建,只是简单的开始了解 Coare Data。在今后的工作中不建议使用这种方式创建,通常情况下我们都会把生成的模板代码都删除,自己手写代码。

2. 创建本地数据库模板

数据库模板.png

项目创建好,我们可以看到有一个.xcdatamodeld文件,这个就是咱们的数据库模板。


创建实体.png

然后点击.xcdatamodeld文件,添加实体,修改实体名字(必须大写字母开头),为实体添加属性(属性必须以小写字母开头)

对于每一个实体,build之后Xcode都会自动帮我们生成相应的实体类代码,如果不想要自动生成,可以选择手动生成,并且可以选择手动生成的语言,这里我们选择 Manual/None


手动生成的语言.png
手动和自动的选择.png

手动生成实体类代码的步骤:选择xcdatamodeld文件-->editor-->Create NSManagedObject SubClass,然后按提示点击就行了。最终你会在项目文件里面看到新生成的实体类代码文件


Create NSManagedObject SubClass.png

之后按照提示走就可以。创建完成后得结果:


结果.png
接下来就可以简单的使用了

3. 使用

这里只做了简单功能的使用,存储数据和查看数据,效果图如下: Simulator Screen Shot - iPhone 8 Plus - 2017-12-19 at 08.42.34.png

3.1 存储数据

存储数据需要四步
1).获取总代理和托管对象托管对象上下文
2).创建实体,获取托管对象
3).将数据赋值给托管对象
4).保存到数据库

        //第一步:获取总代理和托管对象托管对象上下文
        let app = UIApplication.shared.delegate as? AppDelegate
        let context = app?.persistentContainer.viewContext
        //第二步:创建实体,获取托管对象
        let entity = NSEntityDescription.entity(forEntityName: "Student", in: context!)
        let student = NSManagedObject(entity: entity!, insertInto: context) as! Student
        //第三步:将数据赋值给托管对象
        student.name = self.nameTF.text
        student.age = Int32(self.ageTF.text!)!
        //第四步:保存到数据库。如果保存失败,进行处理
        do {
            try context?.save()
        } catch  {
            fatalError("无法保存")
        }

3.2 查询数据

查询数据需要三步
1).获取总代理和托管对象托管对象上下文
2).建立一个获取的请求
3).执行请求

        //第一步:获取总代理和托管对象托管对象上下文
        let app = UIApplication.shared.delegate as? AppDelegate
        let context = app?.persistentContainer.viewContext
        //第二步:建立一个获取的请求
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Student")
        
        //第三步:执行请求
        do {
            //[Student] 这个位置填的是获取对象的类型
            //也可以使用 基类 NSManagedObject
            let fetch = try context?.fetch(fetchRequest) as? [Student]
            var resultStr:String = "查询结果\n"
            for student in fetch! {
                resultStr.append("name:\(student.name!)   age:\(student.age) \n")
            }
            self.resultTextView.text = resultStr
        } catch  {
            fatalError("无法查询")
        }

这样简单的存储和查询功能就完成了 .GitHub Demo

参考

Core Data 概述
Core Data 生成代码 编译错误

上一篇下一篇

猜你喜欢

热点阅读