Contenido del curso

Operaciones CRUD en un proyecto con MVVM

Cómo desarchivar tareas con unarchiveTodo

Resumen

Desarchivar un to-do en una app de tareas es tan simple como invertir el estado que lo envió al archivo. Si ya implementaste la lógica de archivado, esta funcionalidad reutiliza el mismo patrón en el view model y aprovecha los datos observables para refrescar la vista automáticamente. Te muestro cómo conectar el botón con la función unarchiveTodo para devolver tareas a la lista principal.

¿Cómo funciona la función unarchiveTodo en el view model?

La lógica vive en el view model y reutiliza la misma estructura que ya usaste para archivar. La diferencia está en el valor final que asignas al parámetro isArchived.

La función recibe un TodoEntity y sigue tres pasos claros:

  • Buscar el índice del to-do dentro de la colección comparando con un igual a través de toda la lista.
  • Validar que el índice exista; si no, sales de la función con un return.
  • Acceder al elemento por su índice y cambiar isArchived a false.

Después llamas a saveData() para persistir el cambio. Como la colección es un dato observable, la vista reacciona sola: el ítem desaparece de la pantalla de archivados y vuelve a aparecer en la principal sin que tengas que refrescar nada manualmente.

¿Qué hace exactamente unarchiveTodo? Cambia la propiedad isArchived de un to-do a false, lo guarda y deja que la vista observable actualice ambas listas automáticamente.

¿Por qué validar el índice antes de modificar?

Si intentas acceder a una posición que no existe en la colección, la app puede crashear. Validar el índice antes de modificar es una práctica defensiva que mantiene tu código a salvo de estados inconsistentes, sobre todo cuando trabajas con listas que cambian en tiempo real.

¿Cómo conectar el botón plus con la acción de desarchivar?

En el diseño del ítem archivado tienes dos botones. El botón plus es el encargado de devolver la tarea a la lista principal. La conexión con el view model es directa.

Dentro del componente del ítem archivado, ubicas el botón plus y en su acción llamas a viewModel.unarchiveTodo pasando el to-do actual como argumento. Eso es todo lo que necesitas en la vista, porque la lógica pesada ya quedó encapsulada en el view model.

¿Cómo se actualiza la vista al desarchivar? Al usar datos observables en SwiftUI, el cambio de estado en la colección se propaga automáticamente y los elementos se muestran u ocultan según corresponda.

¿Cómo verificar que el flujo funciona en la app?

Una vez ejecutas la aplicación, el comportamiento es inmediato y verificable a simple vista.

Abres la lista de archivados, identificas una tarea como nota dos, presionas el botón plus y la verás desaparecer de esa pantalla. Al volver a la pantalla principal, la tarea reaparece junto a las demás. Lo mismo sucede con tarea tres o nuevo to-do: cada elemento desarchivado regresa a su lugar original sin pasos adicionales.

Este pequeño ciclo (archivar con true, desarchivar con false) demuestra el poder del patrón MVVM combinado con propiedades observables: una sola fuente de verdad, dos vistas sincronizadas y cero código repetido para mantener la UI al día.

¿Ya probaste extender esta lógica para eliminar definitivamente un to-do? Cuéntame en los comentarios cómo estructuraste tu view model.

      Cómo desarchivar tareas con unarchiveTodo