我正在用SwiftUI构建一个应用程序。 当我尝试显示工作表/uff08以前的模态/uff09时/uff0c会出现以下错误消息/uff1a
Thread 1: Fatal error: No observable object of type BixiStationCombinedListViewModel.Type found.
A View.environmentObject(_:) for BixiStationCombinedListViewModel.Type may be missing as an ancestor of this view.
当我使用@State变量显示包含使用MapKit的Map视图的模式时/uff0c会发生此错误。
我是Swift Programming和SwiftUI的新手。 错误信息可能对您来说很清楚/uff0c但对我而言并非如此。
我不明白为什么以及如何实现新的环境对象。
是因为我在选择CardView时选择的电台应该全局存储并将信息传递给专用视图吗/uff1f
处理@State的视图
struct CardView: View {
@EnvironmentObject var bixiModel: BixiStationCombinedListViewModel
@State private var isModalOpen: Bool = false
var station: BixiStationCombinedViewModel
var body: some View {
ZStack(alignment: .leading) {
Card()
StationTextInfo(station: station)
} .onTapGesture {
self.isModalOpen = true
print(self.isModalOpen)
}
.sheet(isPresented: self.$isModalOpen) {
BixiStationDetailView(station: self.station)
}
}
}
我试图在工作表中显示的视图
struct BixiStationDetailView: View {
@EnvironmentObject var bixiModel: BixiStationCombinedListViewModel
var station: BixiStationCombinedViewModel
var body: some View {
VStack {
MapView(coordinate: station.coordinate, name: station.name)
}
}
}
最后对象
class BixiStationCombinedListViewModel: ObservableObject {
init() {
fetchDataFromApi()
}
@Published var stationsCombinedList = [BixiStationCombinedViewModel]()
var stationsInformationList = [BixiStationInformationViewModel]()
var stationsDataList = [BixiStationDataViewModel]()
func fetchDataFromApi() {
}
}
}
我可以获取错误消息并显示正确的视图吗/uff1f
答案是/uff1a
您必须将环境对象传递给BixiStationDetailView/uff0c否则它将无法绑定到其@EnvironmentObject。
.sheet(isPresented: self.$isModalOpen) {
BixiStationDetailView(station: self.station)
.environmentObject(self.bixiModel)
}
由于您将BixiStationDetailView作为工作表呈现/uff0c因此它不是您的CardView的子视图/uff0c因此不会继承其@EnvironmentObject。