SwiftUI-> 线程 1:致命错误:未找到 MyObject.Type 类型的可观察对象(工作表中的 EnvironmentObject)
Posted
技术标签:
【中文标题】SwiftUI-> 线程 1:致命错误:未找到 MyObject.Type 类型的可观察对象(工作表中的 EnvironmentObject)【英文标题】:SwiftUI -> Thread 1: Fatal error: No observable object of type MyObject.Type found (EnvironmentObject in sheet) 【发布时间】:2019-12-26 05:05:54 【问题描述】:我正在使用 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
的模式时,会发生此错误。
我不明白为什么以及如何实施新的Environment Object
。
是因为我在点击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
?
【问题讨论】:
【参考方案1】:你必须将你的环境对象传递给BixiStationDetailView
,否则它将没有任何东西可以绑定到它的@EnvironmentObject
。
.sheet(isPresented: self.$isModalOpen)
BixiStationDetailView(station: self.station)
.environmentObject(self.bixiModel)
由于您将BixiStationDetailView
呈现为工作表,因此它不是您的CardView
的子视图,因此不会继承其@EnvironmentObject
。
【讨论】:
感谢它运行良好!之前我直接在视图中加了@EnvironmentObject
,觉得就够了……但事实并非如此。
我遇到了同样的错误,因为我在init()
中使用了@EnvironmentObject
注释对象。环境对象只有在初始化成功后才可用。
我刚碰到这个。我假设由于呈现的工作表是一个新的层次结构,它不会在环境中传递。
我刚刚在NavigationLink
遇到了这个问题。将它添加到父视图是不够的,我必须将修饰符添加到导航链接的 destination:
参数。不是很直观。以上是关于SwiftUI-> 线程 1:致命错误:未找到 MyObject.Type 类型的可观察对象(工作表中的 EnvironmentObject)的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 致命错误:未找到“”类型的 ObservableObject
SwiftUI - 使用“pushViewController”时出现致命错误
致命错误:@SceneStorage 仅用于 SwiftUI 应用程序生命周期。:文件 SwiftUI,第 0 行
从数组中删除 - 致命错误:索引超出范围 - SwiftUI 绑定