0

I am trying to create a crime tracking app, but right now I am struggling to create structs for different tabs of my app using NavigationManager and screens. However when I made a new struct and tried to use my NavigationManager, it displayed this error message:

2022-10-26 02:18:45.468441-0400 TextFieldAndSecureFieldInSwiftUI[50866:2496084] SwiftUI/EnvironmentObject.swift:70: Fatal error: No ObservableObject of type StatsNavigationManager found. A View.environmentObject(_:) for StatsNavigationManager may be missing as an ancestor of this view.

This is the code for my StatsNavigationManager object and my tab.

final class StatsNavigationManager: ObservableObject {
   
   @Published var screen: Screens? {
       didSet {
           print(" \(String(describing: screen))")
       }
   }
   
   func push(to screen: Screens) {
       self.screen = screen
   }
   
   func popToRoot() {
       self.screen = nil
   }
}
struct StatsView: View {
   let test = cityClass()
   
   struct Input{
       var zip: String = ""
   }
   
   @State private var input: Input = .init()
   @FocusState private var inputFocused: Bool
   @EnvironmentObject var statNavManager: StatsNavigationManager//I define the var I am struggling with here
   //I also tried these approaches but each gave me an error
   //weak var statNavManager : StatsNavigationManager?
   //@State var statNavManager : StatsNavigationManager
   var body: some View {
       NavigationView {
           ZStack {
               Color.blue
               VStack {
                   inputTxtVw
                   submitBtn
               }
               
               .toolbar {
                   ToolbarItemGroup(placement: .keyboard) {
                       Spacer()
                       Text("Search")
                       Button("Retrieve Data") {
                           statNavManager.push(to: .statsPage)
                       }
                       .background(
                       
                           NavigationLink(destination: CityView(),
                                          tag: .statsPage,
                                          selection: $statNavManager.screen) { EmptyView() }//the "$statNavManager.screen" gives me the error and reads No ObservableObject of type StatsNavigationManager found when I hover
                       )
                   }
               }
               .onSubmit(of: .text, submit)
               
              

           }
       }
       .environmentObject(self.statNavManager)
      //also tried StatsNavigationManager.environmentObject(statNavManager)
   }
   }
}
Linda Xue
  • 21
  • 4
  • Have a look at this link, it gives you some good info and examples of how to manage data in your app, in particular using `ObservableObject`: https://developer.apple.com/documentation/swiftui/managing-model-data-in-your-app – workingdog support Ukraine Oct 26 '22 at 06:44
  • @lorem ipsum I added a .environmentObject(self.statNavManager) and changed the code in my post to show it, but it still does not work. I don't really understand where to put the .environmentObject() as it still doesn't work. – Linda Xue Oct 26 '22 at 15:03
  • You have to do that in the parent view from the parent `@StateObject`. look at the link working dog added above. – lorem ipsum Oct 26 '22 at 15:52

0 Answers0