Añadir soporte de core data al proyecto
Vamos a introducir las funcionalidades básicas de Core Data implementando una pequeña aplicación para almacenar y listar notas de texto.
Lo primero que necesitamos para poder trabajar con Core Data es inicializar su stack, es decir instanciar las clases y crear los archivos de configuración necesarios para poder almacenar y recuperar objetos persistentes.
Salvo que tengamos necesidades especiales no es necesario escribir el código de inicialización manualmente, Xcode lo puede hacer por nosotros. Para ello, hay que marcar la casilla de "Use Core Data" que aparece al crear un nuevo proyecto de Xcode, tras elegir la plantilla.
Crea un nuevo proyecto NotasCoreData
usando como plantilla App y asegúrate de que en la segunda pantalla del asistente de creación en el desplegable de Storage seleccionas la opción de Core Data .
Seleccionar esta opción tiene dos efectos:
- Crea un archivo con el mismo nombre del proyecto (y extensión
.xcdatamodeld
) donde se va a almacenar nuestro modelo de datos. En el "Project Navigator" de Xcode aparece con el típico icono de almacenamiento o base de datos. - Incluye una serie de métodos auxiliares en la clase
AppDelegate
para ayudarnos a trabajar con Core Data sin tener que escribir el código que inicializa el stack desde cero (persistentContainer
). Además nos da un método auxiliar para guardar datos (saveContext
)
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "PruebaCoreData")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
// MARK: - Core Data Saving support
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)")
}
}
}
El persistentContainer
nos permite acceder al NSManagedObjectContext
, mediante su propiedad viewContext
. Esto, que es lo que se denomina el contexto de persistencia es lo que necesitaremos para guardar y recuperar objetos.
También puedes añadir soporte de Core Data a cualquier proyecto ya creado, aunque no lo crearas marcando la casilla "use core data". Simplemente se trata de añadir manualmente el fichero del modelo de datos y también el código de Core Data en el
AppDelegate
. Para todos los detalles, puedes seguir por ejemplo las instrucciones de este tutorial.