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.