Post

Replies

Boosts

Views

Activity

Reply to UI not dynamically updating from push notifications fetchdata function
Thank you so much for the reply, I get a network response and the booking does successfully get retrieved, only I have to go in to one of the booking types, which triggers another fetchdata function call before the list is appended with the new booking on the UI, if I then go back to the booking type list, the counter then correctly states the number of new bookings, the AnyBooking is a class import Foundation import CoreData class AnyBooking: Identifiable, Equatable, Hashable { let id: String var booking: any BookingProtocol var displayTitle: String { booking.displayTitle } var displaySubtitle: String? { booking.displaySubtitle } var details: [String: String] { booking.details } var orderedDetails: [(String, String)] { booking.orderedDetails } var calendarEventIdentifier: String? { get { booking.calendarEventIdentifier } set { booking.calendarEventIdentifier = newValue } } var bookingType: String { booking.bookingType } init(_ booking: any BookingProtocol) { self.booking = booking self.id = booking.id print("AnyBooking initialized with ID: \(self.id)") // Log ID on initialization } init(managedObject: NSManagedObject) { if let barBooking = managedObject as? BarBookingEntity { self.booking = BarBooking(coreDataEntity: barBooking) } else if let eventBooking = managedObject as? EventBookingEntity { self.booking = EventBooking(coreDataEntity: eventBooking) } else if let playlistBooking = managedObject as? PlaylistBookingEntity { self.booking = PlaylistBooking(coreDataEntity: playlistBooking) } else if let quoteBooking = managedObject as? QuoteBookingEntity { self.booking = QuoteBooking(coreDataEntity: quoteBooking) } else if let weddingBooking = managedObject as? WeddingBookingEntity { self.booking = WeddingBooking(coreDataEntity: weddingBooking) } else { fatalError("Unknown booking type") } self.id = self.booking.id print("AnyBooking initialized with ID: \(self.id) from CoreData") // Log ID on initialization from CoreData } static func == (lhs: AnyBooking, rhs: AnyBooking) -> Bool { return lhs.id == rhs.id } func hash(into hasher: inout Hasher) { hasher.combine(id) } func addToCalendar(completion: @escaping (Bool, String?, Error?) -> Void) { booking.addToCalendar { success, message, error in DispatchQueue.main.async { completion(success, message, error) } } } } extension AnyBooking { var bookingDate: String? { switch self.booking { case let barBooking as BarBooking: return barBooking.bDate case let eventBooking as EventBooking: return eventBooking.eDate case let playlistBooking as PlaylistBooking: return playlistBooking.pDOccasion case let quoteBooking as QuoteBooking: return quoteBooking.qDateEvent case let weddingBooking as WeddingBooking: return weddingBooking.wDate default: return nil } } } extension AnyBooking { var phoneNumber: String? { switch self.booking { case let barBooking as BarBooking: return barBooking.bNumber case let eventBooking as EventBooking: return eventBooking.eNumber case let quoteBooking as QuoteBooking: return quoteBooking.qNumber case let weddingBooking as WeddingBooking: return weddingBooking.wNumber default: return nil } } }
1w