swift - SwiftUI FetchRequest 错误:“获取请求必须有一个实体”
问题描述
我正在使用具有 SwiftUI 应用程序生命周期(无场景或应用程序委托)的 SwiftUI 和 CoreData 构建一个小型应用程序。当我运行+构建我的应用程序时出现以下错误:
'executeFetchRequest:error: A fetch request must have an entity.'
我已经检查/验证/重新检查了以下内容:
- 我的
[app name].xcdatamodeld
文件名与我传入 NSPersistentContainer 的文件名相同NSPersistentCloudKitContainer(name: [app name])
- 实体的名称
Car
正是我传递给 FetchRequest的名称
@FetchRequest(entity: Car.entity(), sortDescriptors: []) var car: FetchedResults<Car>
- 我为我的实体 Codegen 选择 Manual/None,生成的类是
public class Car: NSManagedObject {}
带有 Car 的扩展名Identifiable
。
这是我的整个视图结构,应该(据我了解)将环境传递给它的所有“子”视图。
struct AppView: View {
@Environment(\.managedObjectContext) var moc
@FetchRequest(entity: Car.entity(), sortDescriptors: []) var car: FetchedResults<Car>
var body: some View {
List {
ForEach(car, id:\.self) { item in
RootView(carData: item)
.environment(\.managedObjectContext, self.moc)
}
}
}
}
和我的@main 结构
@main
struct AutoMateApp: App {
@StateObject var coreData = PersistentCloudKitContainer()
let persistence = PersistentCloudKitContainer()
var body: some Scene {
WindowGroup {
AppView()
.environment(\.managedObjectContext, coreData.persistentContainer.viewContext)
}
}
}
当我使用调试器单步执行时,一旦 WindowGroup 返回,崩溃似乎就会出现。我不确定这是否是有用的信息。
感谢您的所有帮助,谢谢。
解决方案
好的,所以在我的情况下lazy
从帮助中删除。因为似乎 Apple 的样板代码在行中传递了 ,并且 FetchRequest 在它被闭包正确实例化之前访问了该对象,因此无法找到. 从变量中删除立即执行闭包。lazy var persistentContainer: NSPersistentCloudKitContainer = {...}()
AppDelegate
NSManagedObjectModel
let contentView = ContentView().environment(\.managedObjectContext, persistentContainer.viewContext)
NSManagedObject subclass
lazy
希望这仍然可以帮助您并解决您的问题。
推荐阅读
- java - 多个相同长度的模型同时迭代
- android - 如何使用 Image.memory() 或 MemoryImage() 缓存内存图像?
- terraform - .terraform.lock.hcl 是否应该包含在 .gitignore 文件中?
- reactjs - 无法使用 cytoscape.js 制作非常基本的有向图并做出反应
- c - 如何清除C中的字符串
- io - parquet row_group mapping metadata
- python - 尝试通过model.py将对象保存到数据库时出现Django AttributeError
- java - Java - 将文件路径转换为图像
- python - Python:有没有直接简单的方法来删除一行 .csv 文件,而无需读取-删除-重写过程?
- php - 我需要变量中的 HTML 特殊字符