web-dev-qa-db-ja.com

SwiftUI->スレッド1:致命的なエラー:MyObject.Typeタイプの監視可能なオブジェクトが見つかりません

私は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() {

        }        
    }
}

エラーメッセージを表示して適切なビューを表示できますか?

皆さんありがとう!

19
Daymo502

環境オブジェクトをBixiStationDetailViewに渡す必要があります。そうしないと、@EnvironmentObjectにバインドするものは何もありません。

.sheet(isPresented: self.$isModalOpen) {
    BixiStationDetailView(station: self.station)
        .environmentObject(self.bixiModel)
}

BixiStationDetailViewをシートとして表示しているため、これはCardViewのサブビューではないため、@EnvironmentObjectを継承しません。

30
graycampbell