用 Core Data 探索 Bookworm 的神奇世界
2023-11-09 17:33:29
SwiftUI 100 天:Bookworm-part4 用 Core Data 创建图书
书是人类思想的结晶,是开启新世界大门的钥匙。在数字化时代,我们的阅读习惯也随之改变,电子书、有声读物层出不穷。然而,无论是纸质书还是电子书,一本好书都能带给我们无限的启迪和乐趣。
在 SwiftUI 100 天的旅程中,我们已经踏上了探索 Bookworm 应用的奇妙之旅。今天,我们将继续前行,用 Core Data 为 Bookworm 构建一个持久存储的功能。Core Data 是苹果为 iOS 和 macOS 开发者提供的强大数据存储框架,它可以帮助我们轻松地将数据存储在设备上,并提供灵活的数据查询和更新功能。
构建图书数据模型
首先,让我们为我们的图书设计一个 Core Data 模型。打开 Bookworm.xcdatamodeld 文件,然后添加一个新的实体,取名为 “Book” —— 我们将为用户读过的每本书创建一个新的对象。
以构成书的要素为基础,我们需要定义 Book 实体的属性:
- title: 书的标题,一个字符串属性。
- author: 书的作者,一个字符串属性。
- genre: 书的类型,一个字符串属性。
- review: 书的评论,一个字符串属性。
- rating: 书的评分,一个整数属性。
- dateRead: 书的阅读日期,一个日期属性。
这些属性共同构成了一个完整的图书数据模型,它将用于存储每本书的相关信息。
创建添加新书的视图
接下来,我们需要创建一个视图,允许用户添加新书到数据库中。我们将在 ContentView 中创建一个名为 addBookView 的新视图,并使用 NavigationLink 将其与主视图连接起来。
在 addBookView 中,我们将使用 Form 来收集图书信息,包括标题、作者、类型、评论、评分和阅读日期。当用户点击保存按钮时,我们将使用 Core Data 的上下文对象将图书信息保存到数据库中。
实现数据持久化
为了使数据能够持久化存储,我们需要在 AppDelegate 中进行一些配置。首先,我们需要创建一个名为 persistentContainer 的 Core Data 容器对象,它将管理应用程序的 Core Data 堆栈。
let persistentContainer = NSPersistentContainer(name: "Bookworm")
然后,我们需要在应用程序启动时加载 Core Data 堆栈:
persistentContainer.loadPersistentStores { (description, error) in
if let error = error {
fatalError("无法加载 Core Data 堆栈: \(error)")
}
}
最后,我们需要在应用程序终止时保存 Core Data 堆栈:
func applicationWillTerminate(_ application: UIApplication) {
persistentContainer.saveContext { (error) in
if let error = error {
fatalError("无法保存 Core Data 堆栈: \(error)")
}
}
}
通过这些配置,我们就可以实现数据的持久化存储,即使应用程序被终止,数据也不会丢失。
小结
在今天的旅程中,我们学习了如何使用 Core Data 为 Bookworm 构建一个持久存储的功能。我们创建了图书数据模型,设计了添加新书的视图,并实现了数据持久化。现在,Bookworm 已经可以存储用户读过的图书信息了。
在接下来的旅程中,我们将继续探索 Core Data 的强大功能,学习如何查询和更新数据。敬请期待!