SwiftUI + Core Data: list doesn't refresh changes (no relationship)

Recently I have integrated Core Data to my SwiftUI App. Just to simplify, I have two views:

  • TimerListView: fetch data from Core Data and show the list
  • TimerDetailView: show Timer details and update data

Where

struct TimerListView: View {
        
        @Environment(\.managedObjectContext) private var viewContext
        
        @FetchRequest(
            sortDescriptors: [NSSortDescriptor(keyPath: \Timer.id, ascending: true)],
            animation: .default)
        private var timers: FetchedResults<Timer>
        
        var body: some View {
            NavigationView{
                List {
                    ForEach(timers) { timer in
                        NavigationLink(destination: TimerDetailView(timer: timer)) {
                            TimerCardView(timer: timer)
                        }
                    } 
                } 
            }
            [...]
        }
    }

and

struct TimerDetailView: View {
       @Environment(\.managedObjectContext) private var viewContext
       @ObservedObject var timer: Timer
}

Outcomes:

  • Data is correctly updated in Core Data (if I close and reopen the App data is correctly updated)
  • When from TimerDetailView I turn back to TimerListView (after an update) the list doesn't show the updated data

Why the list doesn't show updated data automatically?

Thanks!

Answered by mattiaboldrin in 726080022

SOLVED: all child classes view have to define attribute using @ObservedObject wrapper. In previous code I replaced, into TimerCardView(timer: timer):

  • from var timer: Timer
  • to @ObservedObject var timer: Timer

And now WORKS!

Accepted Answer

SOLVED: all child classes view have to define attribute using @ObservedObject wrapper. In previous code I replaced, into TimerCardView(timer: timer):

  • from var timer: Timer
  • to @ObservedObject var timer: Timer

And now WORKS!

SwiftUI &#43; Core Data: list doesn't refresh changes (no relationship)
 
 
Q