Crear función "add todo" en arquitectura MVVM con Core Data
Clase 11 de 28 • Curso de Patrones MVVM en iOS
Resumen
La arquitectura MVVM es un enfoque robusto para la creación de aplicaciones al proporcionar un esquema organizado, similar al de construir una casa. En este contexto, el view model es la columna vertebral que integra funcionalidades clave, como añadir tareas a un almacenamiento local mediante Core Data. Este proceso implica definir parámetros esenciales como el título, una nota opcional, y la fecha de creación, asignando estos valores a una entidad correspondiente con un identificador único.
¿Qué pasos seguimos para implementar addTodo
en el view model?
La función addTodo
en el view model juega un papel crucial por su capacidad de añadir nuevas tareas al almacenamiento. Aquí los pasos fundamentales:
- Definición de parámetros: Se inicia recibiendo un título (
title
), una nota opcional (note
), y la fecha de creación (date
). - Creación de entidad: Una nueva instancia de la entidad,
newTodo
, se inicializa asociándose al contexto de Core Data. - Asignación de valores: Se asignan el identificador único, el título, la nota, y la fecha a
newTodo
. - Estado por defecto: Al crear una nueva tarea, se establece de manera predeterminada que no está completada ni archivada.
- Persistencia de datos: Finalmente, se invoca a la función
saveData
para asegurar la persistencia en el almacenamiento local.
func addTodo(withTitle title: String, note: String?, date: Date) {
let newTodo = TodoEntity(context: storeContainer.viewContext)
newTodo.id = UUID()
newTodo.title = title
newTodo.note = note
newTodo.date = date
newTodo.isComplete = false
newTodo.isArchive = false
saveData()
}
¿Cómo se gestionan los elementos visuales en la vista?
La vista, representada por todoAddView
, es donde se materializan las interacciones del usuario, desde la introducción de títulos hasta la selección de fechas. Su diseño debe ser intuitivo y funcional para mejorar la experiencia del usuario.
¿Cómo se declaran las variables en la vista?
Al declarar variables, se emplean notaciones que permiten una gestión del estado fluida y eficiente:
-
Inyección de
viewModel
: Utilizando la notación@Environment
, se accede a funcionalidades como adicionar tareas.@Environment(\.viewModel) var viewModel: TodoViewModel
-
Variables de estado: Las notaciones
@State
se emplean para gestionar dinámicamente el título, la nota, y la fecha de creación.@State private var title: String = "" @State private var note: String = "" @State private var date: Date = Date()
¿Qué elementos visuales conforman la interfaz?
El diseño visual debe ser coherente y fácil de usar. A continuación, se presentan los elementos principales:
- Cajas de texto: Empleando
TodoTextInput
, se facilita la entrada para el título, que es obligatorio, y notas, que son opcionales. - Selector de fechas: A través de
DatePicker
, los usuarios pueden seleccionar la fecha y hora deseada.
VStack {
TodoTextInput("Ingrese nombre tarea", text: $title, label: "Tarea")
TodoTextInput("Escriba una descripción de la tarea", text: $note, label: "Nota")
DatePicker("Fecha y hora", selection: $date, in: dateRange, displayedComponents: [.date, .hourAndMinute])
}
En el entorno móvil, estos controles visuales aseguran que el ingreso de datos sea directo y eficiente. Los desarrolladores pueden personalizar estos componentes para mejorar aún más la usabilidad.
Tips para maximizar la funcionalidad de tu aplicación
- Mantenimiento del estado: Implementa el uso de estados reactivos para asegurar que los cambios en la interfaz se reflejen automáticamente.
- Identificadores únicos: Utiliza
UUID
para evitar conflictos en almacenamiento al tener identificadores únicos por cada entidad. - Interfaz amigable: Asegura que la interacción con la aplicación sea lo más intuitiva posible para el usuario final.
En última instancia, construir una aplicación con arquitectura MVVM ofrece una estructura robusta, y mediante este enfoque podemos gestionar eficazmente la lógica y el almacenamiento, preparando el terreno para futuras mejoras y funcionalidades.