我正在使用SwiftUI构建一个应用程序。当我尝试显示一个sheet(之前是Modal)时,出现以下错误消息:
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 View
的模态窗口时,会出现此错误。
我不明白为什么需要实现新的Environment Object
。
是因为当我点击CardView
上的Station
时,应该将其全局存储并将信息传递到专用的View
中吗?
处理@State
的View
:
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)
}
}
}
我试图在 sheet 中显示的 View
:
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() {
}
}
}
我该怎样摆脱错误信息并展示正确的View
?
@EnvironmentObject
,认为这就足够了...但事实并非如此。 - Daymo502init()
中使用了标记为@EnvironmentObject
的对象,所以我遇到了相同的错误。 环境对象只有在成功初始化后才可用。 - mohit kejriwalNavigationLink
的这个问题。将其添加到父视图中是不够的,我还必须将修改器添加到导航链接的destination:
参数中。这并不是很直观。 - Big_Chair