美文网首页Swift 4
Swift-Core Data(1) 基础存储

Swift-Core Data(1) 基础存储

作者: 村雨灬龑 | 来源:发表于2017-12-18 16:31 被阅读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存储不可用,这些都是在持久存储的特征描述。所有的数据都存在这里。

    • XML是将数据存为XML文件,只在 OS X 平台下可用。
    • Binary的方法是存为一个Data文件。
    • InMemory的方式是不会对数据进行真正意义上的持久化,全部存储在内存中,当应用程序退出时,数据也就消失了。
    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 生成代码 编译错误

    相关文章

      网友评论

        本文标题:Swift-Core Data(1) 基础存储

        本文链接:https://www.haomeiwen.com/subject/zsrmwxtx.html