ios - SwiftUI -> 线程 1 : Fatal error: No observable object of type MyObject. 找到类型(工作表中的 EnvironmentObject)

标签 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 的 Map View 的模态时,会发生此错误。

我不明白为什么以及如何实现一个新的环境对象

是不是因为我在 CardView 上点击时选择的 Station 应该全局存储,信息应该传递给专用的 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

最佳答案

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

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

由于您将 BixiStationDetailView 作为工作表呈现,它不是您的 CardView 的 subview ,因此不会继承其 @EnvironmentObject.

关于ios - SwiftUI -> 线程 1 : Fatal error: No observable object of type MyObject. 找到类型(工作表中的 EnvironmentObject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57582813/

相关文章:

javascript - Observable 已订阅,响应已返回,无法访问字段

angular2/RxJS - 如何从 subscribe() 内部重试

angular - rxjs__WEBPACK_IMPORTED_MODULE_3__.Observable.throw 不是函数

ios - 应用程序打开后,循环不会立即运行

ios - Quartz 2D 绘图基元 旋转

ios - 在 Swift 中绘制自定义多边形 Google Maps iOS SDK

ios - CoreLocation 在 Today Extension 中不起作用

ios - 保存高分

ios - 从具有无效证书的 URL 加载 JSON

ios - 如何将项目导入 Xcode