swift - 必须有一个有效的 NSEntityDescription (SwiftUI)
问题描述
漏洞
我今天第一次开始使用 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 名称
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 文档可能会有所帮助。是的,这可能很耗时,但从长远来看可能会有所帮助。
推荐阅读
- python - 在没有重复的两个 numpy 数组之间找到最近对的最快方法
- php - 将数据从 react-native 发送到 laravel api 时出现特殊字符问题
- linux - 如何进行句子之间的比较并计算相似度?
- android - 如何防止设置活动立即保存所有更改?
- reactjs - 链接在 next.js 中无效,即使我在页面上
- javascript - Web API 获取请求正文未定义
- c# - 需要帮助将包含空格的 bbcode URL 转换为有效的降价
- telegraf - 如何在电报中检查插件状态?
- google-api - 我是否需要将每个测试用户添加到谷歌开发者控制台中未经验证的应用程序的用户列表中?
- angular - Angular:使用 FormArray 读取多个文件的文件阅读器