¡Comenzando con Core Data! Difícil en palabras simples

Ya se han escrito muchos temas con Core Data, pero la mayoría de estos artículos están en inglés, además de utilizar muchas palabras "inteligentes" que pueden confundir a los principiantes.

En este artículo trataré de hablar sobre este marco de Apple en un lenguaje comprensible para que incluso los programadores "más pequeños" puedan obtener información por sí mismos y obtener esa cantidad mínima de conocimiento que les ayudará en sus proyectos.

Pequeño tema


Core Data es una herramienta muy poderosa que le permite guardar datos en su aplicación y usarlos más tarde. En este artículo, NO hablaré sobre trabajar con contextos múltiples con sincronización posterior, cómo resolver problemas de migración y varias características avanzadas.

El público objetivo de este artículo son personas que generalmente no tenían experiencia con Core Data.

Bueno ... ¡empecemos!


Para comenzar, debe crear el archivo .xcdatamodeld en sí mismo, después de abrirlo, en la parte inferior de la pantalla verá el botón "Agregar entidad". Al hacer clic en él, se creará su modelo de objeto:



Y ahora, con más detalle:

  1. Su entidad. Puede pensar en Entity como su estructura de datos, que tiene herencia de una determinada clase, NSManagedObject, y también tendrá ciertos campos para escribir datos, más sobre eso más adelante.
  2. Attributes. Entity . + . :
    • Integer 16/32/64 — . , . Int, .
      : Integer16(15)
    • Decimal/Double/Float — . , .
    • String — .
    • Boolean — .
    • Date — Date.
      NOTE: Core Data 00:00:00 UTC 1 1970 .
    • Binary Data — Data
      NOTE: Allow External Storage. Core Data , 100 , Core Data . .
    • UUID — UUID.
    • URI — URL
    • Transformable — , NSCoding.

  3. Relationship. Entity. Relationships :

    1. One-to-One
    2. One-to-Many
    3. Many-to-Many

    Relationships.

    3 Entities, Andrey, Home, Car.

    • — One-to-One Relationship.
    • 1, 2 — One-to-Many Relationship.
    • Many-to-Many Relationship . .
  4. Entity
  5. Campo Codegen. En resumen, este campo indica quién gobernará la creación de las clases NSManagedObject. Para facilitar la operación, seleccione Manual / Ninguno , luego Core Data podrá crear las clases necesarias para su propia Entidad. Sobre esto a continuación.

Para crear nuestra clase de entidad, use:

Editor> Crear subclase de NSManagedObject.



Si desea establecer valores predeterminados para sus atributos, use el método:

public override func awakeFromInsert() {
        super.awakeFromInsert()
        date = Date()
}

Trabajar con NSManagedObjectContext y PersistentStoreCoordinator


Jerarquía de la pila de datos principales:



en términos simples, todas sus entidades se muestran como objetos gestionados en el diagrama anterior. Todos nuestros objetos gestionados se almacenan en NSManagedObjectContext. Contexto Se refiere al NSPersistentStoreCoordinator que almacena sus datos guardados como una caché de filas después de acceder a SQL, pero este no es el caso ahora.

Para crear una instancia de su ManagedObject (Entity), debe consultar su NSPersistentContainer, que es un contenedor para su NSPersistentStoreCoordinator.

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

A continuación, debemos acceder al NSManagedObjectContext a través de nuestro PersistentContainer:

var context: NSManagedObjectContext = {
    return persistentContainer.viewContext
  }()

Ahora podemos crear una instancia de nuestro ManageObject desde nuestro contexto y asignarle un valor:

var person = Person(context: context)
person.age = 32

Guardar objeto


Para guardar, utilizamos una función simple:

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

En el método anterior, verificamos los cambios en nuestro contexto y, si están presentes, guardamos. En caso de error, el método se ejecuta:

context.rollback()

rollback()
El método devuelve nuestro contexto a su estado original y cancela todos los cambios que se realizaron en él.

Eliminar objeto

context.delete(object)

Nos permite eliminar fácilmente un objeto de Core Data.
NOTA: Para que los cambios surtan efecto, es necesario guardar el contexto; de lo contrario, no se guardarán todos los cambios.
context.save()

Recuperando todos los objetos


Para obtener una matriz de nuestros objetos de Core Data, debemos realizar NSFetchRequest. No profundizaré en todo el poder de FetchRequest ya que este artículo está diseñado para principiantes.

let fetchRequest: NSFetchRequest<Person> = Person.fetchRequest()
let objects = try context.fetch(fetchRequest)

Bajo el capó, NSFetchRequest hace un gran trabajo:

  1. NSFetchRequest va al coordinador de tienda persistente
  2. El coordinador de tienda persistente envía una solicitud a la tienda persistente
  3. Persistent Store SQL
  4. SQL . ID Row Value. Row Value Persistent Store Row Cache ID.
  5. Persistent Store Managed Objects ID Persistent Store Coordinator. fault () . Managed Object Context ID, Core Data SQL.
  6. Persistent Store Coordinator context Managed Object
  7. Core Data .
    includePendingChanges = false
  8. NSManagedObject

NOTA: Mientras se ejecuta el Contexto de objetos gestionados NSFetchRequest y el Coordinador de almacenamiento persistente se ejecuta en una cola sincrónica, todos los procesos se bloquean mientras se ejecuta otro proceso

Conclusión


En este artículo, describí la información mínima necesaria para trabajar con Core Data en mi opinión.

Ahora puede crear sus propios modelos de datos, guardarlos, eliminarlos y recuperarlos.

Si está interesado en un tema más "avanzado" sobre cómo trabajar con datos básicos y consejos interesantes, escriba los comentarios y averiguaré qué se puede hacer al respecto. ¡Feliz codificación!

All Articles