Skip to content

Core Data 与 SwiftUI 的集成

Core Data 是 Apple 提供的强大数据持久化框架,可以让你在应用中管理结构化数据。将 Core Data 与 SwiftUI 结合,可以构建数据驱动的、响应迅速的用户界面。你将学会如何在 SwiftUI 应用中使用 Core Data 来存储和展示数据。🎉

设置 Core Data 环境

首先,你需要在 Xcode 项目中启用 Core Data。选择你的项目文件,然后在 "Signing & Capabilities" 选项卡中点击 "+ Capability" 并添加 "Core Data"。Xcode 会自动创建 Core Data 的数据模型文件(.xcdatamodeld)以及相关的代码。

接下来,你需要创建一个 NSPersistentContainer 实例,用于管理 Core Data 的堆栈。这个容器负责加载数据模型、创建持久化存储协调器和管理托管对象上下文。你可以将 NSPersistentContainer 实例作为环境对象注入到 SwiftUI 视图中,以便在视图中访问 Core Data 的数据。

swift
import CoreData
import SwiftUI

class PersistenceController {
    static let shared = PersistenceController()

    let container: NSPersistentContainer

    init() {
        container = NSPersistentContainer(name: "YourDataModelName") // 替换为你的数据模型名称
        container.loadPersistentStores { (storeDescription, error) in
            if let error = error as NSError? {
                // 处理错误
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        }
    }
}

在 SwiftUI 视图中使用 Core Data

要在 SwiftUI 视图中使用 Core Data,你需要使用 @Environment(\.managedObjectContext) 属性包装器来访问托管对象上下文。然后,你可以使用 FetchRequest 来获取 Core Data 中的数据,并在视图中展示这些数据。

swift
struct ContentView: View {
    @Environment(\.managedObjectContext) private var viewContext

    @FetchRequest(
        sortDescriptors: [NSSortDescriptor(keyPath: \Item.timestamp, ascending: true)],
        animation: .default)
    private var items: FetchedResults<Item>

    var body: some View {
        List {
            ForEach(items) { item in
                Text("Item at \(item.timestamp!, formatter: itemFormatter)")
            }
        }
    }
}

数据的增删改查 (CRUD) 操作

在 SwiftUI 中,你可以使用托管对象上下文来执行数据的增删改查操作。要创建新的 Core Data 对象,你需要创建一个新的托管对象,并将其插入到上下文中。要保存更改,你需要调用 save() 方法。

swift
func addItem() {
    withAnimation {
        let newItem = Item(context: viewContext)
        newItem.timestamp = Date()

        do {
            try viewContext.save()
        } catch {
            // 处理错误
            let nsError = error as NSError
            fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
        }
    }
}

要删除 Core Data 对象,你需要从上下文中删除该对象,并保存更改。要更新 Core Data 对象,你可以直接修改对象的属性,然后保存更改。你现在可以开始构建强大的数据驱动的 SwiftUI 应用了!🚀

本站使用 VitePress 制作