Tengo 2 ViewControllers:
VC1 llena su vista de tabla en función del atributo CoreData isPicked, que es bool y muestra solo elementos con estado true . VC2 es un segundo controlador de vista modal (no de pantalla completa) que permite al usuario cambiar el estado del atributo isPicked: marque y desmarque el elemento (haga que sea verdadero o falso) y después de presionar el botón Guardar, los cambios se guardarán en CoreData y VC2 será despedido. Sin embargo, VC1 no se actualiza con los cambios recientes que provienen de VC2.
Lo que probé:
Mi VC1:
override func viewDidLoad() { super.viewDidLoad() let predicate = NSPredicate(format: "isPicked == YES") converterArray = load(for: tableView, and: predicate) } func load(for tableView: UITableView, with request: NSFetchRequest<Currency> = Currency.fetchRequest(), and predicate: NSPredicate? = nil, sortDescriptor: [NSSortDescriptor] = [NSSortDescriptor(key: "shortName", ascending: true)]) -> [Currency] { var array = [Currency]() request.predicate = predicate request.sortDescriptors = sortDescriptor do { array = try context.fetch(request) } catch { print(error) } DispatchQueue.main.async { tableView.reloadData() } return array }Mi VC2:
@IBAction func saveButtonPressed(_ sender: UIBarButtonItem) { do { try context.save() } catch { print(error) } dismiss(animated: true) }También mire un GIF corto donde muestro lo que sucede: HAGA CLIC
No sé cómo después del despido de VC2 se actualizan automáticamente los cambios en VC1...
Supongo que los datos se guardan correctamente en VC2 y el único problema que tiene es la forma correcta de recargar los datos en VC1.
Hacer que VC1 se ajuste a UIViewControllerTransitioningDelegate e implementar su función de delegado animationController(forDismissed dismissed: UIViewController) podría resolver su problema
Leer más aquí
Prueba esto
// Some function in VC1 which loads VC2 func loadVC2() { let newVC = UIViewController() // This is important newVC.transitioningDelegate = self present(newVC, animated: true, completion: nil) } Luego, en VC1, implemente la función animationController(forDismissed dismissed: UIViewController)
extension VC1: UIViewControllerTransitioningDelegate { // UIViewControllerTransitioningDelegate delegate function auto invoked during modal transitions func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { print("returned back") // reload your table in VC1 here /// Returning nil as per guidelines return nil } }Pruébelo y vea si esto resuelve su problema.