Swiftui:尝试传递FetchedRequest数据作为EnvironmentObject到子视图时遇到错误
我有一个小应用程序,我正在尝试使用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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论