必须有一个有效的 NSEntityDescription (SwiftUI)
Posted
技术标签:
【中文标题】必须有一个有效的 NSEntityDescription (SwiftUI)【英文标题】:Must have a valid NSEntityDescription (SwiftUI) 【发布时间】:2021-01-15 05:19:02 【问题描述】:错误
我今天第一次开始使用 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()
任何帮助将不胜感激!
【问题讨论】:
您可以修改您的代码以使用@FetchRequest(sortDescriptors: []) private var items: FetchedResults<Inventory>
并尝试吗?
【参考方案1】:
您能否检查以下是否有效:
检查 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 > 产品 > 清理构建文件夹(Command Shift K)。 (或删除 DerivedData 文件夹的内容)。 删除模拟器/设备上的应用 退出 Xcode 并重新打开并运行。示例项目:
如果您是 CoreData 的新手,使用示例 CoreData 项目可能会有所帮助。 Xcode > 新建项目 > 选中 CoreData 复选框文档
阅读 CoreData 文档可能会有所帮助。是的,这可能很耗时,但从长远来看可能会有所帮助。
https://developer.apple.com/documentation/coredata Xcode 项目示例【讨论】:
感谢您的回答!但是,我在使用该代码时仍然遇到同样的错误,我目前正在尝试将 CoreData 添加到现有项目中。你知道我还能尝试什么吗?对于后续问题,我深表歉意。 Xcode 缓存实体类,有时这可能会导致问题,请尝试 Xcode > Product > Clean Build Folder (Command Shift K)。删除模拟器/设备上的应用,退出Xcode再试一次 我清理了我的构建文件夹,卸载了我的应用程序,然后重新安装了它,但我仍然收到同样的错误。 它似乎适用于示例项目吗?如果是这样,您能否查看示例项目中的PersistenceController
struct 并查看与您的代码相反的初始化和加载方式?
您使用的 NSPersistentContainer 名称是什么?是否与xcdatamodeld
文件名匹配?以上是关于必须有一个有效的 NSEntityDescription (SwiftUI)的主要内容,如果未能解决你的问题,请参考以下文章
[Symfony][Doctrine]文件映射驱动程序必须有一个有效的目录路径
<link rel=preload> 必须有一个有效的 `as` 值
2022-10-13:给定一个只包含三种字符的字符串:( ) 和 *, 写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则: 任何左括号 ( 必须有相应的右括号 )。 任何右括号 )