EnvironmentObject
を使っていたところ、以下のようなエラーに遭遇しました。
Fatal error: No ObservableObject of type **** found.
A View.environmentObject(_:) for * may be missing as an ancestor of this view.
これは、直前に
}
.sheet(isPresented: $isPresented) {
ModalView(showingModal: self.$isPresented)
}
という操作を行っていました。ModalViewの中では呼び出し元と同じEnvironmentObject
を宣言していました。
原因
こちらを参考にしました。
https://stackoverflow.com/questions/58743004/swiftui-environmentobject-error-may-be-missing-as-an-ancestor-of-this-view
https://github.com/peterfriese/Swift-EnvironmentObject-Demo
この記事によると、sheet
によるモーダル表示は、rootとなるContentView
とは全く別のツリー構造となっているようでした。
- ContentView
- SubView
- SubView
- ChildView
- ModalView
というような感じです。
解決策
ここのModalView
でも同じEnvironmentObjectを使うためには、以下のようにして渡します。
}
.sheet(isPresented: $isPresented) {
ModalView(showingModal: self.$isPresented)
.environmentObject(someObject)
}