Contenido del curso
Estructura de un Proyecto con MVVM
Operaciones CRUD en un proyecto con MVVM
- 11

Función addTodo con Core Data en SwiftUI
19:47 min - 12

Funcionalidades básicas para gestionar tareas en SwiftUI
14:30 min - 13

Listado y detalle de notas en SwiftUI
22:35 min - 14

Editar todos con SwiftUI y Core Data
Viendo ahora - 15

Archivar tareas en SwiftUI con Core Data
15:28 min - 16

Cómo desarchivar tareas con unarchiveTodo
03:25 min - 17

Eliminar un to do definitivamente con Core Data
04:15 min - 18

Marcar tareas completadas en SwiftUI
20:50 min - 19

Creación de Vistas Amigables en SwiftUI para Aplicaciones de Tareas
19:52 min
Clean Architecture
- 20

Qué es Clean Architecture y por qué supera a MVVM
05:52 min - 21

Estructura y Ventajas de la Clean Architecture
03:47 min - 22

Estructura de proyecto iOS con Clean Architecture
06:01 min - 23

Mapeo de JSON a structs Swift con Codable
09:10 min - 24

Capa de datos con Clean Architecture en Swift
30:54 min - 25

Casos de uso en la capa de dominio Swift
09:35 min - 26

Capa de presentación con MVVM en SwiftUI
15:37 min - 27

Navegación y detalle con Clean Architecture en SwiftUI
21:54 min
MVVM y Clean Architecture
Editar todos con SwiftUI y Core Data
Resumen
Editar tareas dentro de una app de to-do en SwiftUI implica reutilizar la vista de creación, sincronizar el estado con una variable booleana y actualizar el contexto de Core Data. Si estás construyendo una aplicación con persistencia local en iOS, este flujo te muestra cómo conectar la UI con el view model para que los cambios se reflejen al instante.
¿Cómo corregir la fecha de creación en cada todo?
Antes de tocar la edición, hay un detalle visual que delata un error común: todos los items muestran la misma hora. Eso pasa porque la vista renderiza la hora actual por defecto en lugar de la fecha real almacenada.
Para arreglarlo, abres TodoItemView y reemplazas el valor por defecto del campo de hora por todo.date. Con ese cambio, cada tarea muestra su hora real de creación [00:24].
¿Por qué todas mis tareas muestran la misma hora en SwiftUI? Porque la vista está usando el valor por defecto (hora actual) en lugar de leer la propiedad
datedel modelo. Reemplaza ese valor portodo.datey se corrige.
¿Cómo reutilizar la vista de creación para editar un todo?
La clave está en no duplicar pantallas. La misma vista que sirve para agregar una nueva tarea puede servir para editarla, siempre que le pases el todo existente como parámetro.
Activar el sheet desde el botón Editar
En TodoPreviewView tienes dos botones: Editar y Archivar. Dentro de la acción del botón Editar cambias el estado de la variable showItTodoCreationSheet a true. Ese cambio dispara la presentación de la pantalla flotante [01:08].
Dentro del overlay de esa vista llamas a TodoSheet, que es tu componente de pantalla parcial. Le envías el binding isShow con el valor de showItTodoCreationSheet y eliminas el resto del content que no necesitas en este flujo [01:45].
Pasar el todo existente a TodoAddView
Dentro del TodoSheet instancias TodoAddView, que es la vista que ya conoces para crear notas. Le pasas dos parámetros en el orden correcto que define su inicializador:
showIt: el bindingshowItTodoCreationSheet.todo: la variablesavedTodoque contiene la nota almacenada.
Un detalle práctico: agrega ignoreSafeArea y oculta el teclado del simulador para que no estorbe durante las pruebas [02:55].
¿Cómo precargar los datos del todo en el formulario?
Aquí entra onAppear, el modificador que se ejecuta cuando la vista se carga. Como TodoAddView se reutiliza para crear y editar, necesita saber si llegó un todo con datos o si está vacía.
Dentro del VStack de TodoAddView, en el bloque onAppear, validas si el parámetro todo trae valor. Si lo trae, asignas sus propiedades a las tres variables globales del formulario:
title = todo.title.note = todo.note ?? ""(cadena vacía como fallback).date = todo.date.
Con eso, al tocar Editar en cualquier tarea, el formulario aparece con el título, la nota y la fecha precargados [04:30].
¿Qué hace onAppear en SwiftUI? Ejecuta un bloque de código justo cuando la vista aparece en pantalla. Es ideal para precargar datos en formularios reutilizables.
¿Cómo implementar la función updateTodo en el view model?
La edición visual no sirve de nada si no actualiza la base de datos. Vas a TodoViewModel y modificas la función updateTodo para que reciba los nuevos valores.
Definir parámetros con labels claros
La firma de la función queda así:
todo: el objeto original (para extraer el identificador).newTitle: String: el título actualizado.note: String: la nota actualizada.date: Date: la fecha actualizada.
Usar el label newTitle evita ambigüedades cuando llamas la función desde la vista [06:30].
Validar la existencia con guard
Dentro de la función usas guard junto con getTodoIndex, una función auxiliar que devuelve el índice del elemento en el arreglo @Published o nil si no existe. Si no encuentra el índice, la función retorna y termina; si lo encuentra, sigue ejecutando.
Con el índice ya disponible accedes al arreglo de todos y modificas las propiedades:
todos[index].title = newTitle.todos[index].note = note.todos[index].date = date.
Finalmente llamas a saveData() para persistir los cambios en el contexto de Core Data [07:45].
¿Por qué el botón Guardar no actualiza el todo?
Un error frecuente: implementas la función pero el botón sigue llamando al método de creación. La solución está en el botón Guardar de TodoAddView.
Dentro del bloque condicional que valida si hay un todo cargado, llamas a viewModel.updateTodo enviando los cuatro parámetros: el todo original, el nuevo título, la nota y la fecha. Cuida la sintaxis del label: es withNewTitle, no withTitle [09:20].
Al correr la app, tocas Editar en cualquier tarea, modificas el título a nuevo título y la nota a nueva nota, presionas Guardar y los cambios aparecen reflejados en el listado y en la base de datos local.
¿Qué otra funcionalidad agregarías a tu app de to-dos después de la edición? Cuéntame en los comentarios cómo estás resolviendo la persistencia con Core Data en tus proyectos.