我今天第一次开始使用 CoreData,但一直遇到这个错误。
Thread 1: "An NSManagedObject of class 'MenuRPG.Inventory' must have a valid NSEntityDescription."
但是,我不太确定如何解决这个问题。
Current Product Module
但是每次我尝试将新信息添加到我的数据模式时,我的应用程序都会崩溃并显示该错误。
import SwiftUI
struct BagMenu: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Inventory.entity(), sortDescriptors: []) var items:
FetchedResults<Inventory>
var body: some View {
VStack {
List {
ForEach(items, id: \.id) { item in
Text(item.name ?? "Unnamed")
}
}
Button("Bake") {
let breadPrefix = ["Half-baked", "Decent", "Perfect"]
let breadTypes = ["rye", "sourdough", "bagel"]
let chosenPrefix = breadPrefix.randomElement()!
let chosenBread = breadTypes.randomElement()!
let item = Inventory(context: self.moc)
item.id = UUID()
item.name = "\(chosenPrefix) \(chosenBread)"
try? self.moc.save()
}
}
}
}
任何帮助将不胜感激!
你能检查以下是否有效:
NSPersistentContainer
名称是什么(检查初始值设定项)?是否匹配xcdatamodeld
文件名?PersistenceController
非常重要例子:
import SwiftUI
@main
struct TestCoreDataApp: App {
//This is very important to initialise `PersistenceController` before using it. So that the entities are loaded.
let persistenceController = PersistenceController.shared
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistenceController.container.viewContext)
}
}
}
阅读 CoreData 文档可能会有所帮助。是的,这可能很耗时,但从长远来看可能会有所帮助。
如果您手动设置 NSPersistentContainer 并缺少 PersistenceController,这里的一些更新是 Paul Hudson 为 Xcode 14.2 更新
将“Main”更改为 .xcdatamodeld 文件的“文件名” https://www.hackingwithswift.com/quick-start/swiftui/how-to-configure-core-data-to-work-with-swiftui
我花了2天时间才找到答案!