0

How can a nested ObservableObject reference the parent

Fatal error: No ObservableObject of type Model found. A View.environmentObject(_:) for Model may be missing as an ancestor of this view.
class Model: ObservableObject {
    
    @Published var subModel = SubModel()
    @Published var email: String = ""
}

class SubModel: ObservableObject {
    
    @EnvironmentObject var model: Model // This EnvironmentObject doesn't work. See error.
    
    func run() {
        model.email = "new@test.com" // How can I update the email here? Throws error..
        // Fatal error: No ObservableObject of type Model found. A View.environmentObject(_:) for Model may be missing as an ancestor of this view.
    }
}

struct MainView: View {
    
    @EnvironmentObject var model: Model // This EnvironmentObject works great
    
    var body: some View {
        Button(action: {
            model.subModel.run()
        }) {
            Text("Click me")
        }
    }
}
joshuakcockrell
  • 5,200
  • 2
  • 34
  • 47
  • I wrote this recently about the same issue: https://stackoverflow.com/a/69238617/560942 – jnpdx Sep 20 '21 at 19:41
  • 1
    You have to observe the submodel individually. https://stackoverflow.com/questions/68710726/swiftui-view-updating/68713038#68713038 – lorem ipsum Sep 20 '21 at 19:50

0 Answers0