I can't understand why I'm getting this SwiftUI Environment Object Error

144 Views Asked by At

So I'm trying to update one property of an @EnvironmentObject. I keep getting this error:

SwiftUI/EnvironmentObject.swift:90: Fatal error: No ObservableObject of type ViewModel found. A View.environmentObject(_:) for ViewModel may be missing as an ancestor of this view.

My code looks like this:

class HomeViewController: UIHostingController<HomeView> {
    
    // MARK: - Public Properties

    var topThreePublicUsers = PassthroughSubject<[ExternalUser], Never>()

    
    // MARK: - Private Properties
    
    private var cancellables: Set<AnyCancellable> = []
    
    
    // MARK: - Initializer
    
    init() {
        super.init(rootView: HomeView())

        _ = rootView.environmentObject(HomeView.ViewModel())

        topThreePublicUsers
            .receive(on: DispatchQueue.main)
            .assign(to: \.viewModel.topThreePublicUsers, on: rootView)
            .store(in:&cancellables)
    }
    
    @MainActor required dynamic init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    func pushPublicLeaderBoard(viewController: UIViewController) {
        if let viewController = viewController as? UIHostingController<PublicLeaderboardView> {
            rootView.viewModel.publicLeaderboard = viewController.rootView
        }
    }

}
struct HomeView: View {
    
    // MARK: - Environment
    
    @EnvironmentObject var viewModel: ViewModel

    
    // MARK: - View Model
    
    class ViewModel: ObservableObject {
        @Published var profileView: ProfileView?
    }
      
    
    // MARK: - Body
    
    var body: some View {
        viewModel.profileView
    }
}

I'm thinking I just can't access the environment externally but I don't know... lil help?

0

There are 0 best solutions below