如何解决如何解决“环境对象”这个问题?
//环境对象类
class AppData: ObservableObject {
@Published var studs : [StudentModel]
}
var body: some View {
vstack{
List(appData.studs,id:\.rollNo){ s in //causing error
Text("\(s.rollNo)")
NavigationLink("",destination: StudentView(s: s))
}
}.navigationBarItems(trailing:
Button(action: {
self.addStud.toggle()
}){
Image(systemName: "plus")
.renderingMode(.original)
}
.sheet(isPresented: $addStud,content: {
AddStudent()
})
)
.navigationBarTitle(Text("Students"),displayMode: .inline)
}
致命错误:找不到 AppData 类型的 ObservableObject。 AppData 的 View.environmentObject(_:) 可能缺少作为此视图的祖先。
解决方法
您的示例代码在视图的开头缺少一些行。通过错误消息的声音,您已经有了类似的东西:
struct MyView: View {
@EnvironmentObject var appData: AppData
// ...rest of view ...
}
除了从环境中获取对象的引用的代码之外,您还需要确保将其放入链的更上游。您的错误消息告诉您这就是问题所在——它正在环境中寻找一种 AppData
对象,但里面什么也没有。
假设您将其声明为应用级别;它可能看起来像这样:
@main
struct TestDemoApp: App {
// 1. Instantiate the object,using `@StateObejct` to make sure it's "owned" by the view
@StateObject var appData = AppData()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(appData) // 2. make it available to the hierarchy of views
}
}
}
您还需要做的是确保使用您的环境对象的任何视图也可以访问其 Xcode 预览中的一个。您可能想要创建一个包含示例数据的 AppData
版本,以便您的预览不会与实时数据混淆。
extension AppData {
static var preview: AppData = ...
}
struct MyView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environmentObject(AppData.preview)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。