私はSwiftUIでアプリを構築しています。シート(以前はモーダル)を表示しようとすると、次のエラーメッセージが表示されます。
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を使用するマップビューを含むモーダルを表示しているときに発生します。
SwiftプログラミングとSwiftUIは初めてです。エラーメッセージはわかりやすいかもしれませんが、実際にはわかりません。
新しい環境オブジェクトを実装する理由と方法がわかりません。
station
をテーピングするときに選択したCardView
をグローバルに保存し、専用のビューに情報を渡す必要があるためですか?
@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() {
}
}
}
エラーメッセージを表示して適切なビューを表示できますか?
皆さんありがとう!
環境オブジェクトをBixiStationDetailView
に渡す必要があります。そうしないと、@EnvironmentObject
にバインドするものは何もありません。
.sheet(isPresented: self.$isModalOpen) {
BixiStationDetailView(station: self.station)
.environmentObject(self.bixiModel)
}
BixiStationDetailView
をシートとして表示しているため、これはCardView
のサブビューではないため、@EnvironmentObject
を継承しません。