zoukankan      html  css  js  c++  java
  • 【Swift】CoreData的使用

    CoreData只是iOS数据持久化的其中一个方法,所有数据持久化如下

    1、plist文件(属性列表),通常用于储存用户设置,也zhi可以用于存储捆绑的信息;

    2、preference(偏好设置),常用于保存少量数据;

    3、NSKeyedArchiver(归档),将内存中的对象实例保存成binary到磁盘并且可以逆向这个过程用来保存用户操作状态等;

    4、SQLite 3,使用数据库进行存储;

    5、CoreData,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。

    在新建项目时,把Use Core Data勾上

    如果你创建时没勾,可以参考别人的博客,自己手动添加

     

    由于我勾选了Use Core Data,系统帮我生成了后缀为【xcdatamodeld】的档案

    单击进入后,先创建实体(添加实体),然后添加属性,最后为属性设置需要存储的类型(Type)

    这里我为此实体(MyTest),添加唯一的属性testSaveInt,类型为Int(Integer 16)

    我这里只添加唯一属性,这里额外推荐一篇很棒的博客,除了多属性,里面还有提到属性关联,这个属性被删了,会影响到别的东西

    具体在他写的【四、逻辑与建模】,仔细看完他列举的情景,就明白我在说什么了,不过他是用objective-c写的,有点遗憾

    接着创建一个NSManagedObject子类(点击Editor -> Create NSmanagedObject Subclass...)

    然后先选择自己的项目(当初开始写app时,创建的项目名称)

    最后再勾选刚刚创建的实体"MyTest"

    创建完后,多出两个档案,分别是

    MyTest+CoreDataClass.swift

    MyTest+CoreDataProperties.swift(这个不用修改,它的作用是存放你刚刚添加的属性,例如前面的testSaveInt)

    我们在【MyTest+CoreDataClass.swift】添加自己封装的方法,后续可以通过类的对象,来访问此类的一些函数

    以下的代码,是对 Int 类型的变量 testSaveInt,做增删改查的动作,具体流程如下

    1、使用【增】的方法,写入数据12

    2、使用【】的方法,查询资料库是否有数据(for循环检验:有无用MyTest这个实体创建的资料库?)

    3、使用【改】的方法,找出实体"MyTest"里,数据为12的Int,更改为38

    4、使用【】的方法,查询数据是否被改变(假设第2步是成功的)

    5、使用【删】的方法,资料库内,发现testSaveInt == 38 的,立刻删除

    6、使用【】的方法,看看资料库内,是否都不存在数据了

    import UIKit // 把这行加上
    import Foundation
    import CoreData
    
    @objc(MyTest)
    public class MyTest: NSManagedObject {
         
        // 获取context
        func getContext() -> NSManagedObjectContext {
            let mDelegate = UIApplication.shared.delegate as! AppDelegate
            return mDelegate.persistentContainer.viewContext
        }
        
         
        // MARK: - 【增】的功能
        func coreDataAdd(command: String) {
            switch command {
                case "测试写入": 
                    let mDelegate = UIApplication.shared.delegate as! AppDelegate
                    let mContext = mDelegate.persistentContainer.viewContext
                    
                    let newTest = NSEntityDescription.insertNewObject(forEntityName: "MyTest", into: mContext)as! MyTest
                    
                    newTest.testSaveInt = 12 
                    
                    mDelegate.saveContext()
                default:
                    break
            }
        }
        
        // MARK: - 【删】的功能
        func coreDataDelete(command: String) {
            switch command {
                case "测试删除":
                    // 获取上下文
                    let mDelegate = UIApplication.shared.delegate as! AppDelegate
                    let mContext = mDelegate.persistentContainer.viewContext
                    
                    // 设置查询的实体,此处的实体是MyTest
                    let entity = NSEntityDescription.entity(forEntityName: "MyTest", in: mContext)
                    
                    // 请求实体(Fetch:取、拿来)
                    let request = NSFetchRequest<MyTest>()
                    request.entity = entity
                                    
                    do {
                        let results:[AnyObject]? = try mContext.fetch(request)
                        
                        for myTest in results as![MyTest] {
                            if myTest.testSaveInt == 38 {
                                mContext.delete(myTest)
                                mDelegate.saveContext()
                            }
                        }
                    } catch  {
                        print("删除数据失败")
                   }
                default:
                    break
            }
        }
        
        // MARK: - 【改】的功能
        func coreDataUpdate(command: String) {
            switch command {
                case "测试修改":
                    // 获取上下文
                    let mDelegate = UIApplication.shared.delegate as! AppDelegate
                    let mContext = mDelegate.persistentContainer.viewContext
                    
                    // 设置查询的实体,此处的实体是MyTest
                    let entity = NSEntityDescription.entity(forEntityName: "MyTest", in: mContext)
                    
                    // 请求实体(Fetch:取、拿来)
                    let request = NSFetchRequest<MyTest>()
                    request.entity = entity        
                    
                    do {
                        let results:[AnyObject]? = try mContext.fetch(request)
                        
                        for myTest in results as![MyTest] {
                            if myTest.testSaveInt == 12 {
                                myTest.testSaveInt = 38
                                mDelegate.saveContext()
                            }
                        }
                    } catch  {
                        print("修改数据失败")
                    }
                    
                default:
                    break
            }
        }
        
        // MARK: - 【查】的功能
        func coreDataSearch(command: String) {
            switch command {
                case "测试读取":
                    // 获取上下文
                    let mContext = getContext()
                    
                    // 设置查询的实体,此处的实体是MyTest
                    let entity = NSEntityDescription.entity(forEntityName: "MyTest", in: mContext)
                    
                    // 请求实体(Fetch:取、拿来)
                    let request = NSFetchRequest<MyTest>()
                    request.entity = entity
                                           
                    do {
                        let results:[AnyObject]? = try mContext.fetch(request)
                        
                        for myTest in results as![MyTest] {
                            print("value=(myTest.testSaveInt)")
                        }
                    } catch  {
                        print("读取数据失败")
                    }
                    
                default:
                    break
            }
        }
    }
    

      

      

    最终,在需要执行【数据持久化】的类,写上常量的申请(类的对象)

    let classCoreData: MyTest = MyTest()
    

      

    然后就可以用以下代码,愉快的调用了

    classCoreData.coreDataAdd("测试写入")
    classCoreData.coreDataDelete("测试删除")
    classCoreData.coreDataUpdate("测试修改")
    classCoreData.coreDataSearch("测试读取")
    

      

  • 相关阅读:
    JS
    Python之缩进块
    Python快捷键
    Python介绍
    SOAP UI-----测webservice接口
    jmeter分布式压测(多台电脑一起压测)
    jmeter操作数据库
    jmeter压测
    jmeter关联
    jmeter参数化
  • 原文地址:https://www.cnblogs.com/PureHeart/p/13867958.html
Copyright © 2011-2022 走看看