SwiftUI/EnvironmentObject.swift:70: Fatal error: No ObservableObject of type JunkEventStore found

74 Views Asked by At
import Foundation

@MainActor
class JunkEventStore:ObservableObject {
    @Published var events = [Junk]()
    @Published var preview: Bool
    @Published var changedEvent: Junk?
    @Published var movedEvent: Junk?

    init(preview: Bool = false) {
        self.preview = preview
        fetchEvents()
    }

    func fetchEvents() {
        if preview {
            events = Junk.sampleEvents
        } else {
            // load from your persistence store
        }
    }

    func delete(_ event: Junk) {
        if let index = events.firstIndex(where: {$0.id == event.id}) {
            changedEvent = events.remove(at: index)
        }
    }

    func add(_ event: Junk) {
        events.append(event)
        changedEvent = event
    }

    func update(_ event: Junk) {
        if let index = events.firstIndex(where: {$0.id == event.id}) {
            movedEvent = events[index]
            events[index].note = event.note
            events[index].eventType = event.eventType
            changedEvent = event
        }
    }

}
import SwiftUI

struct StartTabView: View {
    @EnvironmentObject var myEvents: EventStore
    @EnvironmentObject var myEventsJunk: JunkEventStore
    var body: some View {
        TabView{
            EventsListView()
                .tabItem {
                    Label("List", systemImage: "list.triangle")
                }
            EventsJunkView()
                .tabItem {
                    Label("Junk Drawer", systemImage: "tray")
                }
            EventsCalendarView()
                .tabItem {
                    Label("Calendar", systemImage: "calendar")
                }
        }
    }
}

struct StartTabView_Previews: PreviewProvider {
    static var previews: some View {
        StartTabView()
            .environmentObject(JunkEventStore(preview: true))
            .environmentObject(EventStore(preview: true))
            
    }
}

This is where I am getting the error:

import SwiftUI

struct EventsJunkView: View {
    @EnvironmentObject var myEvents: JunkEventStore
    @State private var formType: EventFormTypeJunk?
    var body: some View {
        NavigationStack {
            List {
                ForEach(myEvents.events) { event in
                    JunkViewRow(event: event, formType: $formType)
                    .swipeActions {
                        Button(role: .destructive) {
                            myEvents.delete(event)
                        } label: {
                            Image(systemName: "trash")
                        }
                    }
                }
            }
            .navigationTitle("Junk Drawer ")
            .sheet(item: $formType) { $0 }
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    Button {
                        formType = .new
                    } label: {
                        Image(systemName: "plus.circle.fill")
                            .imageScale(.medium)
                    }
                }
            }
        }
    }
}

struct EventsJunkView_Previews: PreviewProvider {
    static var previews: some View {
        EventsJunkView()
            .environmentObject(JunkEventStore(preview: true))
    }
}

Here is where startTabView is being called:

import SwiftUI

@main
struct AppEntry: App {
    @StateObject var myEvents = EventStore(preview: true)
    @StateObject var myEventsJunk = JunkEventStore(preview: true)

    var body: some Scene {
        WindowGroup {
            StartTabView()
                .environmentObject(myEvents)
                .environmentObject(myEventsJunk)
        }
    }
}

I am making a basic calendar app in SwiftUI. I am very new to this and I keep getting this error:

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

I am trying to add another tab view that is just a list of events but it keeps giving me this error when running it and I don't know where the problem is.

I have an EventStore and a JunkEventStore because I am calling the list with no dates the Junk Drawer, but I keep running into this issue and do not know how to fix it.

0

There are 0 best solutions below