SwiftUI->线程1:致命错误:未找到MyObject.Type类型的可观察对象

时间:2019-08-20 23:52:53

标签: ios swift observable fatal-error swiftui

我正在使用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() {

        }        
    }
}

我可以得到错误消息并显示正确的视图吗?

谢谢!

1 个答案:

答案 0 :(得分:23)

您必须将环境对象传递给BixiStationDetailView,否则它将没有任何内容绑定到其@EnvironmentObject

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

由于您将BixiStationDetailView呈现为表格,因此它不是CardView的子视图,因此不会继承其@EnvironmentObject