Persistencia en dispositivos móviles - iOS
  • Introduction
  • Persistencia básica
    • El sistema de archivos
    • Serialización de clases
    • Property Lists
    • Preferencias de usuario
    • Ejercicios
  • SQLite
    • Introducción a SQLite en iOS
    • El API básico de SQLite
    • Frameworks de terceros
    • Ejercicios
  • ¡Hola Core Data!. Una aplicación de ejemplo
    • Introducción a Core Data
    • El stack de Core Data
    • Las entidades
    • Recuperar los datos
  • Modelos de datos en Core Data
    • Crear modelos
    • Entidades con clases propias
    • CRUD
    • Ejercicios
  • Más sobre modelos de datos
    • Tipos de datos transformables
    • Validaciones
    • El ciclo de vida de los objetos gestionados
    • Deshacer y rehacer operaciones
    • Ejercicios
  • Búsquedas en Core Data
    • Predicados
    • Ordenación
    • Ejercicios
  • Tablas en Core Data
    • El fetched results controller
    • Inicializar el "fetched results controller"
    • Mostrar los datos en la tabla
    • Refrescar la tabla
    • Secciones de tabla automáticas
    • Ejercicios
  • Migraciones de datos
    • Qué son las migraciones de datos
    • Versiones del modelo de datos
    • Migraciones ligeras
    • Migraciones pesadas
    • Ejercicios
    • Apéndice: migraciones en iOS<=9
  • Contextos múltiples
    • Múltiples contextos para trabajos en background
    • Comunicación entre contextos
    • Contextos anidados
    • Ejercicios
  • Persistencia como servicio
    • Backend as a Service
    • Gestión de usuarios en Firebase
    • Persistencia en Firebase
    • Ejercicios
  • Arquitecturas de aplicaciones en iOS
    • Model/View/Controller
    • Model/View/Presenter
    • Model/View/ViewModel
    • VIPER
    • Ejercicios parte I
    • Ejercicios parte II
    • Ejercicios parte III
Powered by GitBook
On this page
  • Creación del modelo (3 puntos)
  • Pruebas con el modelo (4 puntos)

Was this helpful?

  1. Modelos de datos en Core Data

Ejercicios

PreviousCRUDNextMás sobre modelos de datos

Last updated 6 years ago

Was this helpful?

Creación del modelo (3 puntos)

En un restaurante que sirve comida a domicilio los usuarios pueden hacer pedidos de los productos del restaurante. Cada usuario tiene un login y un password. Cada pedido tiene un teléfono y una dirección de entrega. Y cada producto tiene un nombre, un tipo (pizza, ensalada, postre,...) y las calorías que contiene. La siguiente figura muestra el modelo de datos anterior. Recuerda que las dobles puntas de flecha significan a muchos.

Con el modelo anterior un pedido no podría tener más de una instancia de un producto. Esto no es nada realista pero lo dejaremos así para simplificar el modelo.

Crea un proyecto Restaurante y en él crea el modelo de datos que se describe en el párrafo anterior, con las entidades descritas y las relaciones entre ellas que creas convenientes.

Pruebas con el modelo (4 puntos)

Para simplificar no hace falta que hagas un interfaz gráfico para la aplicación. Puedes hacer las siguientes pruebas escribiendo directamente el código en el viewDidLoad del ViewController, y mostrar los resultados a base de print.

Escribe código que inserte datos fijos:

  • Cree varios productos

  • Cree un pedido y añada los productos anteriores al mismo

  • Cree un usuario y le añada el pedido

Para evitar que cada vez que arrancas la aplicación se vayan duplicando los datos puedes borrar inicialmente los datos que haya en las tres entidades llamando a esta función, que puedes copiar al ViewController o poner en una clase aparte:

func borrarDatos() {
    if let miDelegate = UIApplication.shared.delegate as? AppDelegate {
        let miContexto = miDelegate.persistentContainer.viewContext
        let requestUsuarios = NSFetchRequest<NSFetchRequestResult>(entityName: "Usuario")
        let borrarUsuarios = NSBatchDeleteRequest(fetchRequest: requestUsuarios)
        let requestProductos = NSFetchRequest<NSFetchRequestResult>(entityName: "Producto")
        let borrarProductos = NSBatchDeleteRequest(fetchRequest: requestProductos)
        let requestPedidos = NSFetchRequest<NSFetchRequestResult>(entityName: "Pedido")
        let borrarPedidos = NSBatchDeleteRequest(fetchRequest: requestPedidos)

        do {
            try miContexto.execute(borrarUsuarios)
            try miContexto.execute(borrarPedidos)
            try miContexto.execute(borrarProductos)
        } catch {
            // Error Handling
        }
    }
}

Para comprobar que todo es correcto haz una fetch request que obtenga todos los usuarios. Para cada usuario (aunque solo tendrás uno) ve recorriendo todos sus pedidos (haciendo uso de la relación de Core Data), y para cada pedido ve recorriendo todos sus productos e imprime sus datos.