Objectius del Mòdul

En aquest mòdul, aprendràs els conceptes bàsics de Core Data, una de les tecnologies més potents d'Apple per a la gestió de dades persistents en aplicacions iOS. Al final d'aquest mòdul, seràs capaç de:

  • Entendre què és Core Data i per què és útil.
  • Configurar un model de dades bàsic.
  • Crear, llegir, actualitzar i eliminar (CRUD) dades utilitzant Core Data.

Què és Core Data?

Core Data és un framework d'Apple que permet gestionar el model de dades d'una aplicació. Proporciona una manera eficient de treballar amb dades persistents, permetent-te guardar, recuperar i manipular dades de manera fàcil i eficient.

Avantatges de Core Data

  • Persistència de Dades: Guarda les dades de manera persistent, fins i tot després de tancar l'aplicació.
  • Gestió d'Objectes: Permet treballar amb objectes en lloc de dades crues.
  • Optimització: Core Data està optimitzat per a la gestió de grans quantitats de dades.
  • Integració amb iCloud: Permet sincronitzar dades entre dispositius utilitzant iCloud.

Configurant Core Data en un Projecte Xcode

Pas 1: Crear un Nou Projecte amb Core Data

  1. Obre Xcode i selecciona "Create a new Xcode project".
  2. Tria "App" i fes clic a "Next".
  3. Omple els camps necessaris (nom del projecte, organització, etc.).
  4. Assegura't de marcar l'opció "Use Core Data".
  5. Fes clic a "Next" i després a "Create".

Pas 2: Entendre el Model de Dades

Quan crees un projecte amb Core Data, Xcode genera un fitxer .xcdatamodeld. Aquest fitxer és on definiràs les entitats i els seus atributs.

Pas 3: Crear una Entitat

  1. Obre el fitxer .xcdatamodeld.
  2. Fes clic al botó "+" a la part inferior per afegir una nova entitat.
  3. Dona un nom a la teva entitat (per exemple, "Person").
  4. Afegeix atributs a la teva entitat (per exemple, "name" de tipus String, "age" de tipus Integer).

Pas 4: Generar les Classes de Model

  1. Selecciona la teva entitat.
  2. A la pestanya "Editor", selecciona "Create NSManagedObject Subclass".
  3. Segueix les instruccions per generar les classes de model.

Operacions CRUD amb Core Data

Crear Dades

import CoreData

func createPerson(name: String, age: Int16) {
    // Obtenir el context de Core Data
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    let managedContext = appDelegate.persistentContainer.viewContext
    
    // Crear una nova entitat
    let entity = NSEntityDescription.entity(forEntityName: "Person", in: managedContext)!
    let person = NSManagedObject(entity: entity, insertInto: managedContext)
    
    // Assignar valors als atributs
    person.setValue(name, forKeyPath: "name")
    person.setValue(age, forKey: "age")
    
    // Guardar el context
    do {
        try managedContext.save()
    } catch let error as NSError {
        print("No es va poder guardar. \(error), \(error.userInfo)")
    }
}

Llegir Dades

func fetchPeople() -> [Person]? {
    // Obtenir el context de Core Data
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return nil }
    let managedContext = appDelegate.persistentContainer.viewContext
    
    // Crear una petició de fetch
    let fetchRequest = NSFetchRequest<Person>(entityName: "Person")
    
    // Executar la petició
    do {
        let people = try managedContext.fetch(fetchRequest)
        return people
    } catch let error as NSError {
        print("No es va poder fer el fetch. \(error), \(error.userInfo)")
        return nil
    }
}

Actualitzar Dades

func updatePerson(person: Person, newName: String, newAge: Int16) {
    // Obtenir el context de Core Data
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    let managedContext = appDelegate.persistentContainer.viewContext
    
    // Actualitzar els atributs
    person.setValue(newName, forKey: "name")
    person.setValue(newAge, forKey: "age")
    
    // Guardar el context
    do {
        try managedContext.save()
    } catch let error as NSError {
        print("No es va poder guardar. \(error), \(error.userInfo)")
    }
}

Eliminar Dades

func deletePerson(person: Person) {
    // Obtenir el context de Core Data
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    let managedContext = appDelegate.persistentContainer.viewContext
    
    // Eliminar l'objecte
    managedContext.delete(person)
    
    // Guardar el context
    do {
        try managedContext.save()
    } catch let error as NSError {
        print("No es va poder guardar. \(error), \(error.userInfo)")
    }
}

Exercicis Pràctics

Exercici 1: Crear una Entitat "Book"

  1. Crea una nova entitat anomenada "Book" amb els atributs "title" (String) i "author" (String).
  2. Genera les classes de model per a l'entitat "Book".

Exercici 2: Implementar Operacions CRUD per a "Book"

  1. Escriu funcions per crear, llegir, actualitzar i eliminar objectes de tipus "Book".

Solucions

Solució Exercici 1

// Entitat "Book" amb atributs "title" i "author" ja creada en el model de dades.

Solució Exercici 2

func createBook(title: String, author: String) {
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    let managedContext = appDelegate.persistentContainer.viewContext
    
    let entity = NSEntityDescription.entity(forEntityName: "Book", in: managedContext)!
    let book = NSManagedObject(entity: entity, insertInto: managedContext)
    
    book.setValue(title, forKeyPath: "title")
    book.setValue(author, forKey: "author")
    
    do {
        try managedContext.save()
    } catch let error as NSError {
        print("No es va poder guardar. \(error), \(error.userInfo)")
    }
}

func fetchBooks() -> [Book]? {
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return nil }
    let managedContext = appDelegate.persistentContainer.viewContext
    
    let fetchRequest = NSFetchRequest<Book>(entityName: "Book")
    
    do {
        let books = try managedContext.fetch(fetchRequest)
        return books
    } catch let error as NSError {
        print("No es va poder fer el fetch. \(error), \(error.userInfo)")
        return nil
    }
}

func updateBook(book: Book, newTitle: String, newAuthor: String) {
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    let managedContext = appDelegate.persistentContainer.viewContext
    
    book.setValue(newTitle, forKey: "title")
    book.setValue(newAuthor, forKey: "author")
    
    do {
        try managedContext.save()
    } catch let error as NSError {
        print("No es va poder guardar. \(error), \(error.userInfo)")
    }
}

func deleteBook(book: Book) {
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    let managedContext = appDelegate.persistentContainer.viewContext
    
    managedContext.delete(book)
    
    do {
        try managedContext.save()
    } catch let error as NSError {
        print("No es va poder guardar. \(error), \(error.userInfo)")
    }
}

Conclusió

En aquest mòdul, has après els conceptes bàsics de Core Data, com configurar-lo en un projecte Xcode i com realitzar operacions CRUD. Aquestes habilitats són fonamentals per gestionar dades persistents en les teves aplicacions iOS. En el proper mòdul, aprofundirem en la recuperació i visualització de dades utilitzant Core Data.

© Copyright 2024. Tots els drets reservats