Swiftui:尝试传递FetchedRequest数据作为EnvironmentObject到子视图时遇到错误

发布于 2025-01-21 09:03:11 字数 1514 浏览 2 评论 0原文

我有一个小应用程序,我正在尝试使用coredata持续物品,如果它是第一次发布,它们将来自JSON,并将其保存到Coredata中,以供所有以后的重新加载。
如果Foods来自获取Coredata数据的,则有< 1,这意味着这是第一次启动,我通过解码的JSON数据迭代并将其保存到Coredata。

试图将foods传递到我的mainview的说法时,我会遇到错误

Instance method 'environmentObject' requires that 'FetchedResults<Food>' conform to 'ObservableObject'

代码:

import SwiftUI

@main
struct myApp: App {
    @StateObject private var dataController = DataController()

    @State var jsonData: [Food] = Bundle.main.decode("Foods.json")
    
    @FetchRequest(sortDescriptors: []
      ) var foods: FetchedResults<Food>
    
     init() {
        if foods.count < 1 {
            
            let newFood = Food(context: dataController.container.viewContext)
            
            for item in jsonData {
                newFood.id = Int16(item.id)
                newCountry.isEdible = item.isEdible
                newCountry.name = item.name
                newCountry.list_names = country.list_names as NSArray

                
                do {
                    try dataController.container.viewContext.save()
                } catch {
                    let error = error as NSError
                    print(error)
                }
            }
        }
    }
    var body: some Scene {
        WindowGroup {
            MainView()     
               .environmentObject(foods)        
        }
    }
}

I have a small app and I am trying to use CoreData to persist items and if it's first launch, they will come from a JSON and get saved to CoreData for all future reloads.
If foods, which comes from fetching CoreData data, has a count of < 1, then that means it's a first time launch and I iterate through the decoded JSON data and save it to CoreData.

I am getting an error when trying to pass the foods into my MainView saying:

Instance method 'environmentObject' requires that 'FetchedResults<Food>' conform to 'ObservableObject'

Any help on what I am doing wrong?

Code:

import SwiftUI

@main
struct myApp: App {
    @StateObject private var dataController = DataController()

    @State var jsonData: [Food] = Bundle.main.decode("Foods.json")
    
    @FetchRequest(sortDescriptors: []
      ) var foods: FetchedResults<Food>
    
     init() {
        if foods.count < 1 {
            
            let newFood = Food(context: dataController.container.viewContext)
            
            for item in jsonData {
                newFood.id = Int16(item.id)
                newCountry.isEdible = item.isEdible
                newCountry.name = item.name
                newCountry.list_names = country.list_names as NSArray

                
                do {
                    try dataController.container.viewContext.save()
                } catch {
                    let error = error as NSError
                    print(error)
                }
            }
        }
    }
    var body: some Scene {
        WindowGroup {
            MainView()     
               .environmentObject(foods)        
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文