我正在用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变量来显示包含Map View使用MapKit的模式时,会发生此错误.

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

是因为我在点击CardView时 Select 的Station应该被全局存储,并且信息应该被传递给专用的View吗?

处理@StateView人:

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,否则它将没有任何东西可以绑定到其@EnvironmentObject.

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

由于将BixiStationDetailView表示为图纸,因此它不是CardView的子视图,因此不会继承其@EnvironmentObject.

Swift相关问答推荐

SwiftUI轨迹绘制怪异

在SwiftUI中判断选项时避免重复查看

同时具有每个文本的标识符的文本组的可扩展性标识符

UICollectionViewCompostionalLayout Collectionview单元格宽度在重新加载数据后未正确调整大小

不能将符合协议的SWIFT类的实例分配给需要该协议的Objective-C属性

Xcode 15 Beta中如何使用@Observable?

SwiftUI 从任务中安全更新状态变量

Swift-SceneKit-无法从art.scnassets加载.scn文件

UUID 哈希值是不确定的吗?

try 制作一个 Swift 扩展来替换字符串中的多次出现

Swift - 给定一个像 30 的 Int 如何将范围数乘以 7?

符合协议 - 错误?

在 Swift 5.5 中编写同步和异步函数

在 Swift 中计算两个日期之间的差异

如何从 Button 获取标签名称?

如何轻松删除领域中的所有对象

两个 Date 对象之间的所有日期 (Swift)

如何判断 firebase 数据库值是否存在?

从 Swift 初始化程序调用方法

保持窗口始终在顶部?