SwiftUI之CoreData关键技术大全

参考代码

  • SwiftUI数据存储之做个笔记App 新增与查询(CoreData)
  • SwiftUI进阶之存储用户状态实现登录与登出

实体、属性、关系

  • Entity(实体)是CoreData中的类定义。典型的例子是雇员或公司。在关系数据库中,实体对应于一个表。
  • Attribute(属性)是附加到特定实体的一条信息。例如,一个Employee实体可以具有该雇员的姓名,职位和薪水的属性。在数据库中,属性对应于表中的特定字段。
  • Relationship(关系)是多个实体之间的链接。在CoreData中,两个实体之间的关系称为一对一关系,而一个和许多实体之间的关系称为一对多关系。例如,经理可以与一组雇员建立一对多关系,而单个雇员通常与他的经理具有一对一关系。

存储、读取、更新、删除

NSManagedObject

表示存储在CoereData中的单个对象;您必须使用它来创建,编辑,保存和从Core Data持久性存储中删除。稍后您将看到,NSManagedObject是一种变形器。它可以采用数据模型中任何实体的形式。

1、 存储NSManagedObject

   var items: [NSManagedObject] = []

2、读取NSmanagedObject数据
通过NSManagedObject,您可以使用Key-Value来设置name属性。您必须完全按照数据模型中显示的方式拼写Key,否则,您的应用程序将在运行时崩溃。

note.value(forKeyPath: "name") as? String

NSManagedObjectContext

在从CoreData存储中保存或检索任何内容之前,首先需要使用NSManagedObjectContext。您可以将托管对象上下文视为用于处理托管对象的内存“便签本”。

考虑将新的managed object保存到Core Data的过程分为两个步骤:首先,将新的managed object插入managed object context;一旦感到满意,就可以“提交”managed object contenxt中的更改以将其保存到磁盘.

Xcode已经生成了一个managed object context,作为新项目模板的一部分。请记住,只有在开始时选中“Use Core Data”复选框,才会发生这种情况。此默认managed object context作为应用程序委托中NSPersistentContainer的属性存在。要访问它,您首先需要获得对应用程序委托的引用。

SwiftUI之CoreData关键技术大全_第1张图片
选中“Use Core Data”复选框
SwiftUI之CoreData关键技术大全_第2张图片
AppDelegate.swift 文件,自动生成的代码

NSEntityDescription

NSManagedObject被称为变形体,因为它可以表示任何实体。NSEntityDescription是在运行时将数据模型中的实体定义与NSManagedObject实例链接的部分。

技术交流

NSFetchRequest

顾名思义,NSFetchRequest是负责从Core Data获取数据的类。提取请求既强大又灵活。您可以使用获取请求来获取一组满足所提供条件的对象.

1、读取全部数据

 let fetchRequest = NSFetchRequest(entityName: "Note")

2、过滤内容

  let request: NSFetchRequest = User.fetchRequest()
        request.predicate = NSPredicate(format: "name == %@", name)
        
        do {
            orders = try self.moc.fetch(request)
        } catch let error as NSError {
            print(error)
        }
        

设置获取请求的实体属性,使用init(entityName :)对其进行初始化,将获取特定实体的所有对象。这是您在此处获取所有Note实体的操作。另请注意,NSFetchRequest是通用类型。泛型的使用指定了获取请求的预期返回类型,在本例中为NSManagedObject。

 let fetchRequest = NSFetchRequest(entityName: "Note")

我们可以通过制作fetch函数来为了简化调用。

func fetch(){
}

QQ:3365059189
SwiftUI技术交流QQ群:518696470

  • 请关注我的专栏icloudend, SwiftUI教程与源码

https://www.jianshu.com/c/7b3e3b671970

你可能感兴趣的:(SwiftUI之CoreData关键技术大全)