返回

CoreData 数据持久化框架入门:存储数据的强大工具

IOS

SwiftUI 极简教程 20: 使用 CoreData 数据持久化框架(上)

在 SwiftUI 应用中管理数据是至关重要的,CoreData 数据持久化框架提供了处理复杂数据关系和持久化的一流机制。本文是 SwiftUI 极简教程系列的第 20 部分,我们将深入探讨 CoreData 的基本原理,并通过一个示例应用程序展示其实际应用。

CoreData 概览

CoreData 是一个由 Apple 开发的对象关系映射 (ORM) 框架,用于在 iOS、macOS 和 tvOS 平台上对数据进行建模和持久化。它允许您以直观的方式处理复杂的数据模型,并处理与数据存储和检索相关的底层操作。

创建 Core Data 模型

第一步是创建 Core Data 模型,它定义了应用程序中数据的结构。在 Xcode 中,创建一个名为 "ToDo" 的新 Core Data 模型文件。然后,您可以添加实体(表示数据类型)和属性(表示实体中的数据)。

对于我们的 ToDo 应用程序,让我们创建一个名为 "Task" 的实体,其中包含以下属性:

  • name:String
  • completed:Bool
  • priority:Int

使用上下文访问数据

Core Data 使用称为上下文的对象来管理数据操作。上下文负责跟踪对数据的更改,并在需要时将其持久化到存储中。

要获取上下文,请使用以下代码:

let context = PersistenceController.shared.container.viewContext

创建、读取、更新和删除数据

使用上下文,您可以执行 CRUD(创建、读取、更新和删除)操作:

  • 创建: 使用 create() 方法创建一个新对象。
  • 读取: 使用 fetch() 方法检索对象。
  • 更新: 使用对象上的属性设置器更新对象。
  • 删除: 使用 delete() 方法删除对象。

持久化更改

对上下文所做的更改不会自动持久化到存储中。要保存这些更改,请调用 save() 方法:

try context.save()

示例应用程序

为了展示 CoreData 的实际应用,让我们构建一个简单的 ToDo 应用程序:

创建界面

创建一个新的 SwiftUI 视图,如下所示:

struct TaskListView: View {
    @State private var tasks: [Task] = []

    var body: some View {
        List {
            ForEach(tasks) { task in
                Text(task.name!)
            }
        }
    }
}

整合 Core Data

TaskListView 中,添加一个 onAppear() 方法来从 Core Data 加载任务:

.onAppear {
    let request: NSFetchRequest<Task> = Task.fetchRequest()
    tasks = try! context.fetch(request)
}

添加任务

创建一个按钮来添加新的任务:

Button(action: addTask) {
    Image(systemName: "plus")
}

func addTask() {
    let newTask = Task(context: context)
    newTask.name = "New Task"
    try! context.save()
}

完成任务

当用户点击任务时,创建一个 onReceive() 观察器来更新任务的 completed 属性:

.onReceive(task.objectWillChange) { _ in
    task.completed.toggle()
    try! context.save()
}

结论

CoreData 数据持久化框架是 SwiftUI 应用中管理数据的强大工具。它提供了灵活性和效率,使您能够轻松地存储和检索复杂的数据模型。通过遵循本教程中的步骤,您现在可以开始探索 CoreData 的强大功能,并将其应用于您的应用程序中。