Tutorial de introducción a Core Data

Este es un capítulo abreviado de nuestro libro Core Data by Tutorials, que se ha actualizado completamente para Swift 4.2 e iOS 12. Este tutorial se presenta como parte de nuestra Fiesta de lanzamiento de iOS 12: ¡disfruta!

¡Bienvenido a Core Data!

En este tutorial, escribirás tu primera aplicación de Datos básicos. Verá lo fácil que es comenzar con todos los recursos proporcionados en Xcode, desde plantillas de código de inicio hasta el editor de modelos de datos.

Vas a empezar a trabajar desde el principio. Al final del tutorial, sabrás cómo:

  • Datos de modelo con el editor de modelos de Xcode
  • Agregar nuevos registros a Datos de núcleo
  • Obtener un conjunto de registros de datos de núcleo
  • Mostrar los registros obtenidos mediante una vista de tabla.

También tendrá una idea de lo que Core Data está haciendo detrás de escena y cómo puede interactuar con las diversas piezas en movimiento.

Primeros pasos

Abra Xcode y cree un nuevo proyecto de iOS basado en la plantilla de aplicación de vista única. Asigne un nombre a la lista de visitas de la aplicación y asegúrese de que Use Core Data esté marcada.

Al marcar la casilla Usar datos del núcleo, Xcode generará código repetitivo para lo que se conoce como NSPersistentContainer en AppDelegate.Swift.

El NSPersistentContainer consiste en un conjunto de objetos que facilitan el almacenamiento y la recuperación de información de los Datos principales. Dentro de este contenedor hay un objeto para administrar el estado de datos del Núcleo como un todo, un objeto que representa el Modelo de datos, etc.

La pila estándar funciona bien para la mayoría de las aplicaciones, pero dependiendo de su aplicación y sus requisitos de datos, puede personalizar la pila para que sea más eficiente.

Nota: No todas las plantillas de Xcode en iOS ▸ Aplicación tienen la opción de comenzar con Datos principales. En Xcode 10, solo las plantillas de la aplicación Master-Detail y de la Aplicación de Vista única tienen la casilla de verificación Usar datos principales.

La idea de esta aplicación de ejemplo es simple: habrá una vista de tabla con una lista de nombres de su propia «lista negra». Podrá agregar nombres a esta lista y, eventualmente, usar Datos centrales para asegurarse de que los datos se almacenen entre sesiones. No toleramos la violencia en este sitio, por lo que puede pensar en esta aplicación como una lista de favoritos para hacer un seguimiento de sus amigos también, por supuesto.

Haga clic en Principal.storyboard para abrirlo en el creador de interfaces. Seleccione el controlador de vista en el lienzo e insértelo en un controlador de navegación. En el menú Editor de Xcode, seleccione Incrustar en Controller ▸ Controlador de navegación.

Haga clic en la barra de navegación del controlador de navegación para seleccionarlo, luego haga clic en Prefiere Títulos grandes en el Inspector de atributos. Esto le dará a la aplicación de ejemplo un estilo de título que coincida con las aplicaciones de stock de Apple.

A continuación, arrastre una vista de tabla desde la biblioteca de objetos al controlador de vistas y, a continuación, redimensiónela para que cubra toda la vista.

Si aún no está abierto, utilice el icono situado en la esquina inferior izquierda de su lienzo para abrir el contorno del documento de Interface Builder.

Ctrl-arrastre desde la vista de tabla en el contorno del documento a su vista principal y seleccione la restricción de Espacio Inicial a Área segura:

Haga esto tres veces más, seleccionando las restricciones Que llevan el Espacio al Área Segura, el Espacio Superior al Área Segura y, finalmente, el Espacio Inferior al Área Segura. Agregar esas cuatro restricciones hará que la vista de tabla llene su vista principal.

A continuación, arrastre un elemento de Botón de Barra y colóquelo en la barra de navegación del controlador de vista. Finalmente, seleccione el elemento del botón de barra y cambie su elemento del sistema a Agregar.

El lienzo debe ser similar a la siguiente captura de pantalla:

Cada vez que toque el botón Agregar, aparecerá un controlador de alertas que contiene un campo de texto. A partir de ahí, podrás escribir el nombre de alguien en el campo de texto. Al tocar Save se guardará el nombre, se descartará el controlador de alertas y se actualizará la vista de tabla, mostrando todos los nombres que ha introducido.

Pero primero, debe hacer que el controlador de vista sea la fuente de datos de la vista de tabla. En el lienzo, Ctrl y arrastre desde la vista de tabla hasta el icono de controlador de vista amarillo sobre la barra de navegación, como se muestra a continuación, y haga clic en Fuente de datos:

En caso de que se lo pregunte, no necesita configurar el delegado de la vista de tabla, ya que al tocar las celdas no se activará ninguna acción. No es más sencillo!

Abra el editor asistente pulsando Comando-Opción-Entrar o seleccionando el botón central del conjunto de herramientas del editor en la barra de Xcode.

Ctrl-arrastrar desde la vista de tabla al controlador ViewController.swift dentro de la definición de clase para crear un IBOutlet.

A continuación, asigne un nombre a la nueva propiedad IBOutlet tableView, dando como resultado la siguiente línea:

@IBOutlet weak var tableView: UITableView!

A continuación, Ctrl-arrastre desde el botón Agregar al controlador de vista.swift justo debajo de su definición viewDidLoad(). Esta vez, cree una acción en lugar de una salida, nombrando el método addName, con un tipo UIBarButtonItem:

@IBAction func addName(_ sender: UIBarButtonItem) { }

Ahora puede consultar la vista de tabla y la acción del elemento del botón de barra en el código.

A continuación, configurará el modelo para la vista de tabla. Agregue la siguiente propiedad a ViewController.veloz debajo de la tableView IBOutlet:

var names: = 

names es una matriz mutable que contiene valores de cadena mostrados por la vista de tabla. A continuación, reemplace la implementación de viewDidLoad() con lo siguiente:

override func viewDidLoad() { super.viewDidLoad() title = "The List" tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")}

Esto establecerá un título en la barra de navegación y registrará la clase UITableViewCell con la vista de tabla.

Nota: register(_:forCellReuseIdentifier:) garantiza que la vista de tabla devolverá una celda del tipo correcto cuando se proporcione el identificador de reutilización de celdas al método dequeue.

Siguiente, todavía en ViewController.swift, agregue la siguiente extensión UITableViewDataSource debajo de la definición de clase para ViewController:

// MARK: - UITableViewDataSourceextension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return names.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel?.text = names return cell }}

Si alguna vez has trabajado con UITableView, este código debería ser muy familiar. Primero devuelve el número de filas de la tabla como el número de elementos de su matriz names.

A continuación, tableView(_:cellForRowAt:) deseca las celdas de la vista de tabla y las rellena con la cadena correspondiente de la matriz names.

A continuación, necesita una forma de agregar nuevos nombres para que la vista de tabla pueda mostrarlos. Implemente el método addName IBAction que arrastró Ctrl a su código anteriormente:

// Implement the addName IBAction@IBAction func addName(_ sender: UIBarButtonItem) { let alert = UIAlertController(title: "New Name", message: "Add a new name", preferredStyle: .alert) let saveAction = UIAlertAction(title: "Save", style: .default) { action in guard let textField = alert.textFields?.first, let nameToSave = textField.text else { return } self.names.append(nameToSave) self.tableView.reloadData() } let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) alert.addTextField() alert.addAction(saveAction) alert.addAction(cancelAction) present(alert, animated: true)}

Cada vez que toque el botón Agregar, este método presentará un UIAlertController con un campo de texto y dos botones: Guardar y Cancelar.

Save inserta los campos de texto texto actual en el array names y luego vuelve a cargar la vista de tabla. Dado que la matriz names es el modelo que respalda la vista de tabla, lo que escriba en el campo de texto aparecerá en la vista de tabla.

Finalmente, crea y ejecuta tu aplicación por primera vez. A continuación, toque el botón Agregar. El controlador de alerta se verá así:

Agregue cuatro o cinco nombres a la lista. Deberías ver algo similar a abajo:

La vista de tabla mostrará los datos y la matriz almacenará los nombres, pero lo que falta aquí es la persistencia. La matriz está en memoria, pero si fuerzas a salir de la aplicación o a reiniciar el dispositivo, tu lista de visitas se borrará. Los datos principales proporcionan persistencia, lo que significa que pueden almacenar datos en un estado más duradero para que puedan sobrevivir al reinicio de una aplicación o al reinicio de un dispositivo.

Aún no ha agregado ningún elemento de datos principales, por lo que no debe persistir nada después de alejarse de la aplicación. Probemos esto. Pulsa el botón de inicio si utilizas un dispositivo físico o el equivalente (Shift + H + H) si utilizas el Simulador. Esto lo llevará de vuelta a la cuadrícula de aplicaciones familiar en la pantalla de inicio:

En la pantalla de inicio, toca el icono de lista de éxitos para que la aplicación vuelva al primer plano. Los nombres siguen en la pantalla. ¿Qué ha ocurrido?

Al tocar el botón de inicio, la aplicación que se encuentra actualmente en primer plano pasa al segundo plano. Cuando esto sucede, el sistema operativo congela todo lo que se encuentra actualmente en la memoria, incluidas las cadenas de la matriz de nombres. Del mismo modo, cuando llega el momento de despertar y volver al primer plano, el sistema operativo restaura lo que solía estar en la memoria como si nunca se hubiera ido.

Apple introdujo estos avances en la multitarea en iOS 4. Crean una experiencia perfecta para los usuarios de iOS, pero agregan una arruga a la definición de persistencia para los desarrolladores de iOS. ¿De verdad persisten los nombres?

No, en realidad no. Si hubiera eliminado completamente la aplicación en el conmutador de aplicaciones rápido o apagado su teléfono, esos nombres desaparecerían. También puede verificar esto. Con la aplicación en primer plano, ingresa al conmutador de aplicaciones rápido. Puedes hacer esto pulsando dos veces el botón de inicio si tu dispositivo tiene uno o arrastrándolo lentamente hacia arriba desde la parte inferior de la pantalla si tienes un iPhone X.

Desde aquí, desliza la instantánea de la aplicación de lista de éxitos hacia arriba para terminar la aplicación. Si estás trabajando en un iPhone X, tienes que mantener pulsada la instantánea de la aplicación hasta que aparezca un botón rojo de borrar en la parte superior derecha.

Después de quitar la aplicación del conmutador de aplicaciones, no debe haber rastro de lista de éxitos en la memoria viva (sin juego de palabras). Para verificar que los nombres se han ido, vuelve a la pantalla de inicio y toca el icono de la lista de éxitos para activar un nuevo lanzamiento.

La diferencia entre congelación instantánea y persistencia puede ser obvia si ha trabajado con iOS durante algún tiempo y está familiarizado con la forma en que funciona la multitarea. En la mente de un usuario, sin embargo, no hay diferencia. Al usuario no le importa por qué los nombres siguen ahí, si la aplicación pasó a un segundo plano y regresó, o porque la aplicación los guardó y los volvió a cargar. Todo lo que importa es que los nombres siguen ahí cuando la aplicación vuelve.

Por lo tanto, la prueba real de persistencia es si los datos siguen ahí después del lanzamiento de una nueva aplicación.

Modelado de sus datos

Ahora que sabe cómo verificar la persistencia, puede sumergirse en los Datos principales. Tu objetivo para la aplicación Lista de éxitos es simple: conserva los nombres que introduzcas para que estén disponibles para verlos después de iniciar una nueva aplicación.

Hasta este punto, ha estado utilizando cadenas Swift simples y antiguas para almacenar los nombres en la memoria. En esta sección, reemplazará estas cadenas con objetos de datos principales.

El primer paso es crear un modelo de objetos administrados, que describe la forma en que los datos del núcleo representan los datos en el disco.

De forma predeterminada, Core Data utiliza una base de datos SQLite como almacén persistente, por lo que puede pensar en el Modelo de datos como el esquema de la base de datos.

Nota: Te encontrarás con la palabra manejado bastante cuando trates con Datos Centrales. Si ve «administrado» en el nombre de una clase, como en NSManagedObjectContext, es probable que esté tratando con una clase de datos principales. «Gestionado» se refiere a la gestión de Datos Centrales del ciclo de vida de los objetos de datos centrales.

Sin embargo, no asuma que todas las clases de datos principales contienen la palabra «administrado». Para obtener una lista completa de clases de Datos Básicos, consulte la referencia del marco de datos básicos en el explorador de documentación.

Dado que ha elegido usar Core Data, Xcode creó automáticamente un archivo de modelo de datos para usted y lo nombró Lista de éxitos.xcdatamodeld.

Lista de éxitos abierta.xcdatamodeld. Como puede ver, Xcode tiene un potente editor de modelos de datos:

El editor de modelos de datos tiene muchas funciones que puede explorar más adelante. Por ahora, centrémonos en crear una entidad de datos de núcleo único.

Haga clic en Agregar entidad en la parte inferior izquierda para crear una nueva entidad. Haga doble clic en la nueva entidad y cambie su nombre a Persona, de esta manera:

Te estarás preguntando por qué el editor de modelos utiliza el término Entity. ¿No estabas simplemente definiendo una nueva clase? Como verás en breve, los datos básicos vienen con su propio vocabulario. Aquí hay un resumen rápido de algunos términos que comúnmente encontrará:

  • Una entidad es una definición de clase en Core Data. El ejemplo clásico es un Employee o un Company. En una base de datos relacional, una entidad corresponde a una tabla.
  • Un atributo es una pieza de información adjunta a una entidad en particular. Por ejemplo, una entidad Employee podría tener atributos para los empleados name, position y salary. En una base de datos, un atributo corresponde a un campo concreto de una tabla.
  • Una relación es un vínculo entre varias entidades. En los Datos básicos, las relaciones entre dos entidades se denominan relaciones a-uno, mientras que las relaciones entre una y muchas entidades se denominan relaciones a-muchos. Por ejemplo, un Manager puede tener una relación a muchos con un conjunto de empleados, mientras que un individuo Employee generalmente tendrá una relación a uno con su gerente.
Nota: Probablemente hayas notado que las entidades suenan mucho como clases. Del mismo modo, los atributos y las relaciones se parecen mucho a las propiedades. ¿Cuál es la diferencia? Puede pensar en una entidad de datos principales como una definición de clase y en el objeto administrado como una instancia de esa clase.

Ahora que sabe qué es un atributo, puede agregar un atributo al objeto Person creado anteriormente. Sigue en la lista de éxitos.xcdatamodeld, seleccione Person en el lado izquierdo y haga clic en el signo más (+) en Atributos.

Establezca el nombre del nuevo atributo en, er, name y cambie su tipo a String:

En Core Data, un atributo puede ser de uno de varios tipos de datos.

Guardar en Datos básicos

Abrir ViewController.swift, agregue la siguiente importación del módulo de datos básicos debajo de la importación UIKit :

import CoreData

Esta importación es todo lo que necesita para comenzar a usar la API de datos Básicos en su código.

A continuación, reemplace la definición de propiedad names por la siguiente:

var people: = 

Almacenará entidades Personen lugar de nombres de cadena, de modo que cambie el nombre de la matriz que sirve como modelo de datos de la vista de tabla a people. Ahora contiene instancias de NSManagedObject en lugar de cadenas simples.

NSManagedObject representa un único objeto almacenado en Datos Centrales; debe usarlo para crear, editar, guardar y eliminar de su almacén persistente de datos centrales. Como verás en breve, NSManagedObject es un cambiaformas. Puede tomar la forma de cualquier entidad en su Modelo de Datos, apropiándose de los atributos y relaciones que haya definido.

Dado que está cambiando el modelo de la vista de tabla, también debe reemplazar ambos métodos de origen de datos implementados anteriormente. Reemplace su extensión UITableViewDataSource con lo siguiente:

// MARK: - UITableViewDataSourceextension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return people.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let person = people let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) cell.textLabel?.text = person.value(forKeyPath: "name") as? String return cell }}

El cambio más significativo en estos métodos ocurre en tableView(_:cellForRowAt:). En lugar de emparejar celdas con la cadena correspondiente en la matriz de modelos, ahora emparejará celdas con el NSManagedObjectcorrespondiente.

Observe cómo obtiene el atributo name de NSManagedObject. Sucede aquí:

cell.textLabel?.text = person.value(forKeyPath: "name") as? String

¿por Qué hacer esto? Resulta que NSManagedObject no conoce el atributo name que definió en su Modelo de datos, por lo que no hay forma de acceder a él directamente con una propiedad. La única forma en que Core Data proporciona para leer el valor es la codificación clave-valor, comúnmente conocida como KVC.

Nota: KVC es un mecanismo en la Base para acceder a las propiedades de un objeto indirectamente usando cadenas. En este caso, KVC hace que NSMangedObject se comporte como un diccionario en tiempo de ejecución.La codificación clave-valor

está disponible para todas las clases heredadas de NSObject, incluida NSManagedObject. No puede acceder a propiedades usando KVC en un objeto Swift que no descienda de NSObject.

A continuación, busque addName(_:) y reemplace save UIAlertAction por lo siguiente:

let saveAction = UIAlertAction(title: "Save", style: .default) { action in guard let textField = alert.textFields?.first, let nameToSave = textField.text else { return } self.save(name: nameToSave) self.tableView.reloadData()}

Esto toma el texto en el campo de texto y lo pasa a un nuevo método llamado save(name:). Xcode se queja porque save(name:) aún no existe. Añádelo a continuación addName(_:):

func save(name: String) { guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return } // 1 let managedContext = appDelegate.persistentContainer.viewContext // 2 let entity = NSEntityDescription.entity(forEntityName: "Person", in: managedContext)! let person = NSManagedObject(entity: entity, insertInto: managedContext) // 3 person.setValue(name, forKeyPath: "name") // 4 do { try managedContext.save() people.append(person) } catch let error as NSError { print("Could not save. \(error), \(error.userInfo)") }}

¡Aquí es donde entran en juego los datos centrales! Esto es lo que hace el código:

  1. Antes de poder guardar o recuperar cualquier cosa de su almacén de datos Principales, primero debe tener en sus manos un NSManagedObjectContext. Puede considerar un contexto de objeto administrado como un «bloc de notas» en memoria para trabajar con objetos administrados.

    Piense en guardar un nuevo objeto administrado en Datos Centrales como un proceso de dos pasos: primero, inserte un nuevo objeto administrado en un contexto de objeto administrado; una vez que esté satisfecho, «confirme» los cambios en su contexto de objeto administrado para guardarlo en el disco.

    Xcode ya ha generado un contexto de objeto administrado como parte de la plantilla del nuevo proyecto. Recuerde, esto solo sucede si marca la casilla de verificación Usar datos centrales al principio. Este contexto de objeto administrado predeterminado permanece como una propiedad de NSPersistentContainer en el delegado de aplicación. Para acceder a él, primero obtiene una referencia al delegado de la aplicación.

  2. Se crea un nuevo objeto administrado y se inserta en el contexto de objeto administrado. Puede hacer esto en un solo paso con el método estático de NSManagedObject: entity(forEntityName:in:).

    Es posible que se pregunte de qué se trata un NSEntityDescription. Recordar anteriormente, NSManagedObject se llamaba una clase de cambio de forma porque puede representar cualquier entidad. Una descripción de entidad es la pieza que vincula la definición de entidad de su Modelo de datos con una instancia de NSManagedObject en tiempo de ejecución.

  1. Con un NSManagedObject en la mano, se establece el atributo name mediante la codificación clave-valor. Debe escribir la clave KVC (name en este caso) exactamente como aparece en su modelo de datos, de lo contrario, su aplicación se bloqueará en tiempo de ejecución.
  2. Puede confirmar los cambios en person y guardarlos en disco llamando a save en el contexto de objeto administrado. Nota save puede generar un error, por lo que lo llamas usando la palabra clave try dentro de un bloque do-catch. Por último, inserte el nuevo objeto administrado en la matriz people para que aparezca cuando se vuelva a cargar la vista de tabla.

Eso es un poco más complicado que usar una matriz de cadenas, pero no está tan mal. Parte del código aquí, como obtener el contexto de objeto administrado y la entidad, se puede hacer una sola vez en su propio init() o viewDidLoad() y luego reutilizarse más tarde. Para simplificar, lo estás haciendo todo con el mismo método.

Compile y ejecute la aplicación, y agregue algunos nombres a la vista de tabla:

Si los nombres se almacenan en los Datos Principales, la aplicación Lista de éxitos debería pasar la prueba de persistencia. Con la aplicación en primer plano, vaya al conmutador de aplicaciones rápido y, a continuación, finalice la aplicación.

En Springboard, toca la aplicación Lista de éxitos para activar un nuevo lanzamiento. Espera, ¿qué pasó? La vista de tabla está vacía:

Se guardó en los Datos Principales, pero después de iniciar una nueva aplicación, la matriz people está vacía. Esto se debe a que los datos están sentados en el disco esperándote, pero aún no los estás mostrando.

Obtención de datos básicos

Para obtener datos de su almacén persistente en el contexto de objeto administrado, debe obtenerlos. Abra ViewController.swift y agregue lo siguiente a continuación viewDidLoad():

override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //1 guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return } let managedContext = appDelegate.persistentContainer.viewContext //2 let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Person") //3 do { people = try managedContext.fetch(fetchRequest) } catch let error as NSError { print("Could not fetch. \(error), \(error.userInfo)") }}

Paso a paso, esto es lo que hace el código:

  1. Antes de poder hacer algo con los datos Principales, necesita un contexto de objeto administrado. ¡Ir a buscar no es diferente! Al igual que antes, se abre el delegado de aplicación y se toma una referencia a su contenedor persistente para tener en sus manos su NSManagedObjectContext.
  2. Como su nombre indica, NSFetchRequest es la clase responsable de obtener Datos del núcleo. Las solicitudes de recuperación son potentes y flexibles. Puede usar solicitudes de recuperación para obtener un conjunto de objetos que cumplan los criterios proporcionados (p. ej. dame todos los empleados que viven en Wisconsin y han estado con la compañía al menos tres años), valores individuales (es decir, dame el nombre más largo en la base de datos) y más.

    Las solicitudes de recuperación tienen varios calificadores utilizados para refinar el conjunto de resultados devueltos. Por ahora, debes saber que NSEntityDescription es uno de estos calificadores requeridos.

    Establecer la propiedad entity de una solicitud de búsqueda, o bien inicializarla con init(entityName:), obtiene todos los objetos de una entidad en particular. Esto es lo que haces aquí para obtener todas las entidades Person. También tenga en cuenta que NSFetchRequest es un tipo genérico. Este uso de genéricos especifica el tipo de retorno esperado de una solicitud de recuperación, en este caso NSManagedObject.

  3. Usted entrega la solicitud de recuperación al contexto de objeto administrado para hacer el trabajo pesado. fetch(_:) devuelve una matriz de objetos administrados que cumplen los criterios especificados por la solicitud de búsqueda.

Nota: Al igual que save(), fetch(_:) también puede generar un error, por lo que debe usarlo dentro de un bloque do. Si se produjo un error durante la recuperación, puede inspeccionar el error dentro del bloque catch y responder adecuadamente.

Compile y ejecute la aplicación. Inmediatamente, debería ver la lista de nombres que agregó anteriormente:

¡Genial! Han vuelto de la muerte (juego de palabras). Agregue algunos nombres más a la lista y reinicie la aplicación para verificar que el guardado y la obtención funcionen. Sin eliminar la aplicación, restablecer el Simulador o lanzar el teléfono desde un edificio alto, los nombres aparecerán en la vista de tabla sin importar qué.

Nota: Había algunos bordes ásperos en esta aplicación de ejemplo: tenía que obtener el contexto de objeto administrado del delegado de la aplicación cada vez, y usó KVC para acceder a los atributos de una entidad en lugar de un estilo de objeto más natural person.name.

Puntos clave

  • Los datos básicos proporcionan persistencia en el disco, lo que significa que sus datos estarán accesibles incluso después de terminar su aplicación o apagar su dispositivo. Esto es diferente de la persistencia en memoria, que solo guardará sus datos mientras su aplicación esté en memoria, ya sea en primer plano o en segundo plano.
  • Xcode viene con un potente editor de modelos de datos, que puede usar para crear su modelo de objetos administrados.
  • Un modelo de objeto administrado se compone de entidades, atributos y relaciones
  • Una entidad es una definición de clase en Core Data.
  • Un atributo es una pieza de información adjunta a una entidad.
  • Una relación es un vínculo entre varias entidades.
  • An NSManagedObject es una representación en tiempo de ejecución de una entidad de datos central. Puede leer y escribir en sus atributos utilizando la codificación Clave-Valor.
  • Necesita datos de NSManagedObjectContext a save() o fetch(_:) desde y hacia los datos principales.

a Dónde Ir Desde Aquí?

Puede descargar el proyecto completado para este tutorial utilizando los botones «Descargar materiales» en la parte superior o inferior de este tutorial.

En este tutorial, ya ha experimentado varios conceptos básicos de Datos fundamentales: Modelos de datos, entidades, atributos, objetos administrados, contextos de objetos administrados y solicitudes de recuperación.

Si disfrutaste de lo que aprendiste en este tutorial, ¿por qué no echas un vistazo al libro completo Core Data by Tutorials, disponible en nuestra tienda?

He aquí una muestra de lo que hay en el libro:

1. Capítulo 1, Tu primera Aplicación de Datos Básicos: ¡Harás clic en Archivo ▸ Nuevo Proyecto y escribirás una aplicación de Datos Básicos desde cero! Este capítulo cubre los aspectos básicos de la configuración del modelo de datos y, a continuación, la adición y obtención de registros.

2. Capítulo 2, Subclases de NSManagedObject: NSManagedObject es la clase de almacenamiento de datos base de los gráficos de objetos de datos principales. Este capítulo le enseñará cómo personalizar sus propias subclases de objetos administrados para almacenar y validar datos.

3. Capítulo 3, La pila de datos Principales: Bajo el capó, los datos principales se componen de muchas partes que trabajan juntas. En este capítulo, aprenderás cómo encajan estas piezas y cómo te alejarás de la plantilla Xcode de inicio para crear tu propio sistema personalizable.

4. Capítulo 4, Obtención intermedia: Sus aplicaciones obtendrán datos todo el tiempo, y Core Data ofrece muchas opciones para obtener los datos de manera eficiente. Este capítulo cubre solicitudes de recuperación más avanzadas, predicados, ordenación y obtención asíncrona.

5. Capítulo 5, NSFetchedResultsController: Las vistas de tabla son el núcleo de muchas aplicaciones iOS, ¡y Apple quiere que los datos del núcleo funcionen bien con ellas! En este capítulo, aprenderá cómo NSFetchedResultsController puede ahorrarle tiempo y código cuando sus vistas de tabla están respaldadas por datos de Datos principales.

6. Capítulo 6, Control de versiones y migración: A medida que actualice y mejore su aplicación, es casi seguro que su modelo de datos tendrá que cambiar. En este capítulo, aprenderá a crear varias versiones de su modelo de datos y, a continuación, migrar a los usuarios para que puedan conservar sus datos existentes a medida que se actualizan.

7. Capítulo 7, Pruebas unitarias: Las pruebas son una parte importante del proceso de desarrollo, ¡y no debe dejar los Datos centrales fuera de eso! En este capítulo, aprenderá a configurar un entorno de prueba independiente para los datos principales y verá ejemplos de cómo probar sus modelos.

8. Capítulo 8, Medición y mejora del rendimiento: Nunca nadie se quejó de que una aplicación fuera demasiado rápida, por lo que es importante estar atento al seguimiento del rendimiento. En este capítulo, aprenderás a medir el rendimiento de tu aplicación con varias herramientas de Xcode y, a continuación, aprenderás algunos consejos para lidiar con los puntos lentos en tu código.

9. Capítulo 9, Múltiples contextos de Objetos administrados: En este último capítulo, ampliará la pila de datos Principales habitual para incluir múltiples contextos de objetos administrados. Aprenderá cómo esto puede mejorar el rendimiento percibido y ayudar a que la arquitectura de su aplicación sea menos monolítica y más compartimentada.

Y para ayudar a endulzar el trato, la edición digital del libro está a la venta por 4 44.99! Pero no espere, este precio de venta solo está disponible por un tiempo limitado.

Hablando de dulces ofertas, asegúrate de echar un vistazo a los grandes premios que regalaremos este año con la Fiesta de Lanzamiento de iOS 11, ¡incluidos más de 9 9,000 en regalos!

Para ser elegible para este regalo épico de iOS 12, todo lo que tienes que hacer es dejar un comentario en la publicación de lanzamiento original, haciéndonos saber qué libro o curso es tu favorito en esta lista, o qué próximo libro o curso te entusiasma más.

¡Esperamos que disfrutes de esta actualización y que estés atento a más lanzamientos y actualizaciones de libros!

raywenderlich.com Semanalmente

raywenderlich.com el boletín de noticias es la forma más fácil de mantenerse al día sobre todo lo que necesita saber como desarrollador móvil.

Obtenga un resumen semanal de nuestros tutoriales y cursos, y reciba un curso gratuito en profundidad por correo electrónico como bono!

la Calificación Promedio

4.6/5

Añadir una clasificación para este contenido

iniciar sesión para añadir una clasificación

56 calificaciones

Deja una respuesta

Tu dirección de correo electrónico no será publicada.