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

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

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

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

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

当我使用

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

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

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
1个回答
96
投票

你必须将你的环境对象传递给

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

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

由于您将

BixiStationDetailView
作为工作表呈现,因此它不是您的
CardView
的子视图,因此不会继承其
@EnvironmentObject
.

© www.soinside.com 2019 - 2024. All rights reserved.