Core Data para Swift: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Core Data y para qué sirve?

\n\n

Core Data no es una biblioteca en el sentido tradicional (como, por ejemplo, Alamofire o SnapKit), sino un potente framework de Apple para gestionar el modelo de datos y garantizar la persistencia (almacenamiento) de datos en aplicaciones para iOS, macOS, tvOS y watchOS. Está integrado en el SDK y no requiere instalación por separado a través de gestores de paquetes como CocoaPods o Swift Package Manager.

\n\n

¿Para qué sirve Core Data? En el desarrollo moderno de aplicaciones móviles, casi siempre es necesario almacenar datos localmente: ya sea una lista de tareas, el historial de mensajes, la configuración del usuario o la caché de noticias. Core Data proporciona para ello una pila completa que incluye:

\n
    \n
  • Modelo de datos (NSManagedObjectModel) — descripción de entidades, sus atributos y relaciones.
  • \n
  • Contexto (NSManagedObjectContext) — un "borrador" donde trabajas con los objetos antes de guardarlos.
  • \n
  • Persistent Store Coordinator — el puente entre el contexto y el almacenamiento físico (SQLite, XML, archivo binario, etc.).
  • \n
  • Persistent Container — un envoltorio simplificado (apareció en iOS 10) que combina todos los componentes.
  • \n
\n\n

A diferencia del uso simple de SQLite o UserDefaults, Core Data gestiona automáticamente el ciclo de vida de los objetos, admite la reversión de cambios, la carga diferida, el almacenamiento en caché, la validación e incluso la integración con iCloud. Esto lo convierte en una herramienta indispensable para cualquier aplicación seria que trabaje con datos.

\n\n

Instalación de Core Data

\n\n

Core Data es parte de los frameworks del sistema de Apple. No es necesario ejecutar pip install o npm install. Para usarlo, basta con importar el framework en tu proyecto.

\n\n

1. Agregar el framework al proyecto

\n

Al crear un nuevo proyecto en Xcode, puedes marcar inmediatamente la casilla "Use Core Data". Si el proyecto ya existe, agrega el framework manualmente:

\n
    \n
  1. Selecciona tu proyecto en el navegador (Project Navigator).
  2. \n
  3. Ve a la pestaña "General" de tu compilación objetivo (Target).
  4. \n
  5. Desplázate hacia abajo hasta la sección "Frameworks, Libraries, and Embedded Content".
  6. \n
  7. Haz clic en "+" y selecciona CoreData.framework.
  8. \n
\n\n

2. Crear el archivo del modelo de datos

\n

También necesitarás un archivo con la extensión .xcdatamodeld. Normalmente se crea automáticamente al activar Core Data. Si no existe, crea un nuevo archivo: File → New → File → Core Data → Data Model.

\n\n

3. Importar en el código

\n

En los archivos Swift donde trabajarás con Core Data, agrega:

\n
import CoreData
\n\n

Con esto, la instalación está completa. Core Data está listo para usarse.

\n\n

Inicio rápido: ejemplo de código

\n\n

Veamos un ejemplo muy simple: crear una entidad "User" con los atributos "name" y "age", guardar y leer datos.

\n\n

Paso 1: Crear el modelo de datos

\n

Abre el archivo .xcdatamodeld. Agrega una entidad (Entity) con el nombre "User". Agrega los atributos: name (tipo String) y age (tipo Int16). Crea una clase para esta entidad: Editor → Create NSManagedObject Subclass. Xcode generará los archivos User+CoreDataProperties.swift y User+CoreDataClass.swift.

\n\n

Paso 2: Configurar el Persistent Container

\n

En AppDelegate (o en un gestor separado) creamos el contenedor:

\n
import CoreData\n\nclass PersistenceController {\n    static let shared = PersistenceController()\n    \n    let container: NSPersistentContainer\n    \n    init() {\n        container = NSPersistentContainer(name: "YourModelName") // Nombre de tu archivo .xcdatamodeld\n        container.loadPersistentStores { (storeDescription, error) in\n            if let error = error as NSError? {\n                fatalError("Unresolved error \\(error), \\(error.userInfo)")\n            }\n        }\n    }\n    \n    var cont                    

Recommendations