如何解决SwiftUI -> 线程 1:致命错误:找不到 ModelData 类型的 ObservableObject
我使用 SwiftUI 创建了一个应用程序,当我尝试显示按钮时出现此错误消息:
Thread 1: Fatal error: No ObservableObject of type ModelData found. A View.environmentObject(_:) for ModelData may be missing as an ancestor of this view.
当我尝试使用 @EnvironmentObject
来显示我的应用的一个视图时会发生这种情况。
我的代码是
struct OpportunityDetail: View {
@EnvironmentObject var modelData: ModelData
var opportunity: Opportunity
var opportunityIndex: Int {
modelData.opportunities.firstIndex(where: { $0.id == opportunity.id })!
}
var body: some View {
ScrollView {
MapView(coordinate: opportunity.locationCoordinate)
.frame(height: 300)
.ignoresSafeArea(edges: .top)
CircleImage(opportunity: opportunity)
.offset(y: -130)
.padding(.bottom,-130)
vstack {
vstack(alignment: .leading) {
Text(opportunity.position)
.font(.title)
HStack {
Text(opportunity.name)
.font(.subheadline)
Spacer()
Text(opportunity.city)
.font(.subheadline)
}
.font(.subheadline)
.foregroundColor(.secondary)
Divider()
Text("About the Opportunity")
.font(.title2)
Text(opportunity.description)
ApplyButton(isSet: $modelData.opportunities[opportunityIndex].isApplied)
}
.padding()
}
}
.navigationTitle(opportunity.name)
.navigationBarTitledisplayMode(.inline)
}
}
但是,View 的预览和实时预览效果很好
struct OpportunityDetail_Previews: PreviewProvider {
static let modelData = ModelData()
static var previews: some View {
OpportunityDetail(opportunity: modelData.opportunities[0])
.environmentObject(modelData)
}
}
我知道我必须在某处传递我的环境对象,但不知道如何传递。我将不胜感激任何人的帮助。
解决方法
通过将 .environmentObject(modelData)
放入 ContentView
解决了我的问题,因为正如 New Dev 所说,它是我所有子视图的根视图:
您必须使用 .environmentObject(modelData),就像您在视图层次结构中的某处进行预览一样。例如,OpportunityDetail 的父视图可以这样做,或者您可以在根级别创建它。例如,如果 ContentView 是您的根视图,您可以将其设置在那里。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。