必须具有有效的NSEntityDescription(SwiftUI)

drkbr07n  于 2023-04-28  发布在  Swift
关注(0)|答案(2)|浏览(137)

Bug

我今天第一次开始使用CoreData,但一直遇到这个bug。
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()
            }
        }
    }
}

任何帮助将非常感谢!

gblwokeq

gblwokeq1#

你能检查一下下面的工作吗:

检查NSPersistentContainer名称

  • 您使用的NSPersistentContainer名称是什么(检查初始化器)?是否与xcdatamodeld文件名匹配?

查看应用代码

  • 在使用PersistenceController之前初始化它是非常重要的。
  • 以便加载实体。如果您正在使用SwiftUI App生命周期,请检查以下内容:

示例:

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)
        }
    }
}

清空缓存:

  • Xcode缓存实体类,有时这可能会导致问题。
  • 尝试Xcode〉Product〉Clean Build Folder(Command Shift K)。(或删除DerivedData文件夹的内容)。
  • 删除模拟器/设备上的应用程序
  • 退出Xcode,重新打开并运行。

样本项目:

  • 如果您是CoreData的新手,使用示例CoreData项目可能会有所帮助。
  • Xcode〉新建项目〉选中CoreData复选框

文档

这可能有助于查看CoreData文档。是的,这可能是耗时的,但从长远来看可能会有所帮助。

ffx8fchx

ffx8fchx2#

如果您手动设置NSPersistentContainer并且缺少PersistenceController,这里是Paul哈德逊为Xcode 14提供的更新。2

更改“主”为您的“FileName”的文件。xcdatamodeldhttps://www.hackingwithswift.com/quick-start/swiftui/how-to-configure-core-data-to-work-with-swiftui

我花了两天时间才找到答案!

相关问题