首页 > 解决方案 > SwiftUI FetchRequest 错误:“获取请求必须有一个实体”

问题描述

我正在使用具有 SwiftUI 应用程序生命周期(无场景或应用程序委托)的 SwiftUI 和 CoreData 构建一个小型应用程序。当我运行+构建我的应用程序时出现以下错误:

'executeFetchRequest:error: A fetch request must have an entity.'

我已经检查/验证/重新检查了以下内容:

@FetchRequest(entity: Car.entity(), sortDescriptors: []) var car: FetchedResults<Car>
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 返回,崩溃似乎就会出现。我不确定这是否是有用的信息。

感谢您的所有帮助,谢谢。

标签: swiftcore-dataswiftui

解决方案


好的,所以在我的情况下lazy从帮助中删除。因为似乎 Apple 的样板代码在行中传递了 ,并且 FetchRequest 在它被闭包正确实例化之前访问了该对象,因此无法找到. 从变量中删除立即执行闭包。lazy var persistentContainer: NSPersistentCloudKitContainer = {...}()AppDelegateNSManagedObjectModellet contentView = ContentView().environment(\.managedObjectContext, persistentContainer.viewContext)NSManagedObject subclasslazy

希望这仍然可以帮助您并解决您的问题。


推荐阅读