SwiftUI -> 线程 1:致命错误:找不到 MyObject.Type 类型的可观察对象(工作表中的 EnvironmentObject)

问题描述 投票:0回答:2

我正在使用 SwiftUI 构建一个应用程序。当我尝试显示工作表(以前是模态)时,出现此错误消息:

线程 1:致命错误:找不到 BixiStationCombinedListViewModel.Type 类型的可观察对象。

BixiStationCombinedListViewModel.Type 的 View.environmentObject(_:) 作为此视图的祖先可能会丢失。

当我使用

@State
变量来显示包含使用 MapKit 的
Map View
的模态时,会发生此错误。

我不明白为什么以及如何实施新的

Environment Object

是不是因为我点击

Station
时选择的
CardView
应该全局存储,并且信息应该传递到专用的
View

View
处理
@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)
        }

    }
}

我试图在工作表中显示的

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

ios swift observable fatal-error swiftui
2个回答
109
投票

您必须将环境对象传递给

BixiStationDetailView
,否则它将没有任何东西可以绑定到它的
@EnvironmentObject

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

由于您将

BixiStationDetailView
显示为工作表,因此它不是
CardView
的子视图,因此不会继承其
@EnvironmentObject


0
投票

.environmentObject()
添加到预览并没有解决我的问题。 我试图在
init()
函数中使用环境对象。 将代码移至
onAppear()
解决了我的问题。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.