我正在研究 Paul Hudson 的 SwiftUI 100 天,在 Project 11 中遇到了一个令人沮丧的 CoreData 问题。这是保罗的代码的直接提升,在他的视频中编译和运行良好。Bookworm.xcdatamodeld 有一个名为 Student 的实体,它有两个属性:一个名为 id 的 UUID 和一个名为 name 的字符串。
它编译得很好,但运行它会导致 ForEach 崩溃,“学生”用红色下划线。控制台中弹出的错误消息说:
2020-10-31 12:13:47.934507-0400 Bookworm[614:7766183] [error] 错误:任何模型中都没有 NSEntityDescriptions 声明 NSManagedObject 子类“Bookworm.Student”,因此 +entity 被混淆了。你加载你的 NSManagedObjectModel 了吗?CoreData:错误:任何模型中都没有 NSEntityDescriptions 声明 NSManagedObject 子类“Bookworm.Student”,因此 +entity 被混淆了。你加载你的 NSManagedObjectModel 了吗?2020-10-31 12:13:47.934651-0400 Bookworm[614:7766183] [error] 错误:+[Bookworm.Student entity] 无法找到 NSEntityDescription 与托管对象子类 CoreData 的唯一匹配:错误:+[ Bookworm.Student 实体] 无法找到 NSEntityDescription 与托管对象子类的唯一匹配项 2020-10-31 12:13:47.953419-0400 Bookworm[614:
我搜索了很多,并尝试了我发现的所有推荐解决方案,包括:简单地关闭并重新打开 Xcode(步骤 1),清理项目,然后重复步骤 1,删除所有派生数据并重复步骤 1。我已经验证在模块的检查器中选择了当前产品模块,并且 Codegen 选择了类定义。
import SwiftUI
import CoreData
struct ContentView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Student.entity(), sortDescriptors: []) var students: FetchedResults<Student>
var body: some View {
VStack {
List {
ForEach(students, id: \.id) { student in
Text(student.name ?? "Unknown")
}
}
}
}
}