Contenido del curso

Operaciones CRUD en un proyecto con MVVM

Eliminar un to do definitivamente con Core Data

Resumen

Eliminar un to do en SwiftUI con Core Data es la última pieza que cierra el ciclo de gestión de tareas: archivar, desarchivar y borrar de forma definitiva. Aquí verás cómo conectar el icono de basurero con una función del view model que remueve el objeto del almacenamiento local, una habilidad útil para cualquier desarrollador iOS que esté armando apps con persistencia de datos.

Cómo se elimina un to do desde el view model en Core Data

La lógica vive en el view model, igual que las funciones de archivar y desarchivar. La idea es validar el índice, aislar el objeto y enviarlo al contexto de Core Data para borrarlo.

El flujo arranca obteniendo el índice del to do dentro de la colección principal. Si ese índice no existe, la función hace un return y termina ahí mismo. Esa validación evita errores cuando intentas eliminar algo que ya no está en memoria.

¿Qué hace la función delete del contexto en Core Data? Recibe un objeto específico y lo marca para eliminarlo del almacenamiento local. Después necesitas llamar a save para que el cambio se persista.

Por qué crear una variable intermedia antes de borrar

En lugar de acceder directamente a la colección principal en una sola línea, conviene crear una variable llamada toDoToRemove. Esa variable guarda el objeto exacto que está en la posición del índice encontrado.

Con esa referencia clara, llamas a storeContainer.viewContext.delete(toDoToRemove) y luego ejecutas saveData(). El resultado es un borrado limpio, sin ambigüedades sobre qué elemento se está eliminando.

  • Validar que el índice existe antes de continuar.
  • Guardar el to do en una variable intermedia.
  • Enviar ese objeto a la función delete del contexto.
  • Persistir el cambio con saveData.

Este patrón se repite en muchas operaciones de Core Data, así que vale la pena interiorizarlo.

Cómo conectar el botón de eliminar con la función del view model

La función ya existe, pero necesita un disparador. Ese disparador es el botón con el icono rojo de basurero que vive en la vista de to dos archivados.

En la acción del botón llamas a viewModel.deleteToDo y le pasas el to do actual que viene de la variable del ítem. Es el mismo patrón que usaste para desarchivar, solo que ahora apuntas a la función de borrado definitivo.

¿Dónde se coloca la llamada a deleteToDo? Dentro de la acción del botón en el componente del ítem archivado, enviando el to do como parámetro.

Qué pasa cuando corres la aplicación

Al ejecutar la app y entrar a la pantalla de archivados, el botón rojo ya responde. Haces clic, el to do desaparece de esa lista y tampoco vuelve a aparecer en la pantalla principal. Se fue para siempre del almacenamiento.

Puedes probar el ciclo completo: crear un to do, archivarlo, desarchivarlo de regreso a la pantalla principal, archivarlo de nuevo y finalmente eliminarlo. Cada acción responde sin fricción.

Qué diferencia hay entre archivar y eliminar un to do

Archivar y desarchivar son operaciones livianas: solo cambian el valor de una variable booleana interna. Esa bandera define si el to do aparece en la pantalla principal o en la de archivados.

Eliminar es otra cosa. Aquí no estás cambiando un estado, estás removiendo el objeto del almacenamiento local de Core Data de forma permanente. No hay vuelta atrás desde la interfaz.

  • Archivar: cambia una variable booleana, el to do sigue existiendo.
  • Desarchivar: revierte esa booleana, el to do vuelve a la lista principal.
  • Eliminar: borra el objeto del viewContext y lo persiste con save.

Entender esa diferencia te ayuda a decidir cuándo usar una bandera de estado y cuándo realmente liberar espacio en la base de datos.

¿Ya probaste implementar la función de eliminar en tu propio proyecto? Cuéntame en los comentarios cómo te fue con la validación del índice y si decidiste agregar una alerta de confirmación antes de borrar.