Core Data es un framework de Apple que permite a los desarrolladores gestionar el modelo de datos de sus aplicaciones de manera eficiente. Es una herramienta poderosa para almacenar, recuperar y manipular datos persistentes en aplicaciones iOS y macOS. En esta sección, aprenderemos los conceptos básicos de Core Data, cómo configurarlo en un proyecto de iOS y cómo realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) con él.

Contenido

Introducción a Core Data

Core Data es más que una simple base de datos. Es un framework de persistencia de objetos que permite:

  • Almacenamiento de datos: Guardar datos de manera persistente.
  • Recuperación de datos: Consultar y recuperar datos de manera eficiente.
  • Gestión de relaciones: Manejar relaciones entre diferentes entidades de datos.
  • Validación de datos: Validar datos antes de guardarlos.
  • Migración de datos: Actualizar el esquema de datos sin perder información.

Configuración de Core Data en un Proyecto de iOS

Para configurar Core Data en un proyecto de iOS, sigue estos pasos:

  1. Crear un nuevo proyecto de iOS:

    • Abre Xcode y selecciona "Create a new Xcode project".
    • Elige "App" y haz clic en "Next".
    • Rellena los detalles del proyecto y asegúrate de marcar la casilla "Use Core Data".
  2. Configurar el NSPersistentContainer:

    • Xcode generará automáticamente un archivo AppDelegate.swift con la configuración básica de Core Data.
    • El NSPersistentContainer es el contenedor que gestiona el modelo de datos y el contexto de Core Data.
import CoreData

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    lazy var persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "MyAppModel")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()

    func saveContext () {
        let context = persistentContainer.viewContext
        if context.hasChanges {
            do {
                try context.save()
            } catch {
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }
}

Modelo de Datos

El modelo de datos en Core Data se define mediante entidades, atributos y relaciones. Para crear un modelo de datos:

  1. Abrir el archivo .xcdatamodeld:

    • Este archivo se encuentra en el proyecto y se abre en el editor de Xcode.
  2. Agregar una nueva entidad:

    • Haz clic en el botón "+" en la parte inferior de la pantalla y selecciona "Add Entity".
    • Nombra la entidad, por ejemplo, Person.
  3. Agregar atributos a la entidad:

    • Selecciona la entidad Person y haz clic en el botón "+" en la sección "Attributes".
    • Agrega atributos como name (String) y age (Integer 16).

Operaciones CRUD

Crear

Para crear un nuevo objeto en Core Data:

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let newPerson = NSEntityDescription.insertNewObject(forEntityName: "Person", into: context) as! Person
newPerson.name = "John Doe"
newPerson.age = 30

do {
    try context.save()
} catch {
    print("Failed to save: \(error)")
}

Leer

Para leer datos de Core Data:

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest = NSFetchRequest<Person>(entityName: "Person")

do {
    let people = try context.fetch(fetchRequest)
    for person in people {
        print("Name: \(person.name), Age: \(person.age)")
    }
} catch {
    print("Failed to fetch: \(error)")
}

Actualizar

Para actualizar un objeto existente:

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest = NSFetchRequest<Person>(entityName: "Person")
fetchRequest.predicate = NSPredicate(format: "name == %@", "John Doe")

do {
    let people = try context.fetch(fetchRequest)
    if let personToUpdate = people.first {
        personToUpdate.age = 31
        try context.save()
    }
} catch {
    print("Failed to update: \(error)")
}

Eliminar

Para eliminar un objeto:

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
let fetchRequest = NSFetchRequest<Person>(entityName: "Person")
fetchRequest.predicate = NSPredicate(format: "name == %@", "John Doe")

do {
    let people = try context.fetch(fetchRequest)
    if let personToDelete = people.first {
        context.delete(personToDelete)
        try context.save()
    }
} catch {
    print("Failed to delete: \(error)")
}

Ejercicio Práctico

Ejercicio

Crea una aplicación simple que permita al usuario agregar, listar, actualizar y eliminar personas usando Core Data. La aplicación debe tener una interfaz de usuario básica con un formulario para agregar personas y una lista para mostrar las personas almacenadas.

Solución

  1. Crear el modelo de datos:

    • Agrega una entidad Person con atributos name (String) y age (Integer 16).
  2. Configurar la interfaz de usuario:

    • Usa un UITableView para listar las personas.
    • Usa un formulario con campos de texto para agregar y actualizar personas.
  3. Implementar las operaciones CRUD:

    • Usa los ejemplos de código proporcionados anteriormente para implementar las operaciones CRUD en los controladores de vista correspondientes.

Conclusión

En esta sección, hemos aprendido los conceptos básicos de Core Data, cómo configurarlo en un proyecto de iOS y cómo realizar operaciones CRUD. Core Data es una herramienta poderosa para gestionar datos persistentes en aplicaciones iOS, y dominar su uso es esencial para cualquier desarrollador de iOS. En la siguiente sección, exploraremos los fundamentos de SwiftUI, una nueva forma de construir interfaces de usuario en iOS.

© Copyright 2024. Todos los derechos reservados