Introducció a Core Data
Core Data és un framework d'Apple que permet gestionar el model de dades d'una aplicació. És una eina poderosa per emmagatzemar dades de manera persistent, gestionar objectes i relacionar-los entre si. En aquest tema, aprendrem a configurar Core Data en un projecte de Swift, crear models de dades, realitzar operacions CRUD (Crear, Llegir, Actualitzar, Eliminar) i optimitzar el rendiment.
Objectius
- Entendre què és Core Data i per què és útil.
- Configurar Core Data en un projecte de Swift.
- Crear models de dades.
- Realitzar operacions CRUD.
- Optimitzar el rendiment de Core Data.
Configuració de Core Data
Pas 1: Crear un nou projecte amb Core Data
- Obre Xcode i crea un nou projecte.
- Selecciona "App" i fes clic a "Next".
- Omple els camps necessaris (nom del projecte, organització, etc.).
- Assegura't de marcar la casella "Use Core Data".
- Fes clic a "Next" i després a "Create".
Pas 2: Entendre els fitxers generats
Quan crees un projecte amb Core Data, Xcode genera alguns fitxers addicionals:
- Model de dades (
.xcdatamodeld
): Aquí és on definiràs els teus models de dades. - Persistent Container: Gestiona el context de dades i la coordinació de la persistència.
Crear Models de Dades
Pas 1: Obrir el model de dades
- A la navegació del projecte, busca el fitxer
.xcdatamodeld
i fes-hi clic. - Això obrirà l'editor de models de dades.
Pas 2: Afegir entitats
- Fes clic al botó "+" a la part inferior de l'editor de models de dades per afegir una nova entitat.
- Dona un nom a la teva entitat (per exemple,
Person
).
Pas 3: Afegir atributs
- Selecciona l'entitat que acabes de crear.
- Fes clic al botó "+" a la secció "Attributes" per afegir un nou atribut.
- Dona un nom i un tipus al teu atribut (per exemple,
name
de tipusString
).
Exemple de Model de Dades
Operacions CRUD
Crear
Per crear un nou objecte i guardar-lo a la base de dades:
import CoreData import UIKit class ViewController: UIViewController { let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext override func viewDidLoad() { super.viewDidLoad() // Crear un nou objecte let newPerson = Person(context: context) newPerson.name = "John Doe" newPerson.age = 30 // Guardar l'objecte do { try context.save() } catch { print("Error al guardar: \(error)") } } }
Llegir
Per llegir objectes de la base de dades:
func fetchPeople() { let request: NSFetchRequest<Person> = Person.fetchRequest() do { let people = try context.fetch(request) for person in people { print("Nom: \(person.name), Edat: \(person.age)") } } catch { print("Error al llegir: \(error)") } }
Actualitzar
Per actualitzar un objecte existent:
func updatePerson(person: Person) { person.name = "Jane Doe" do { try context.save() } catch { print("Error al actualitzar: \(error)") } }
Eliminar
Per eliminar un objecte de la base de dades:
func deletePerson(person: Person) { context.delete(person) do { try context.save() } catch { print("Error al eliminar: \(error)") } }
Optimització del Rendiment
Utilitzar NSBatchUpdateRequest
Per actualitzar múltiples registres de manera eficient:
let batchUpdateRequest = NSBatchUpdateRequest(entityName: "Person") batchUpdateRequest.propertiesToUpdate = ["age": 35] batchUpdateRequest.resultType = .updatedObjectsCountResultType do { let batchUpdateResult = try context.execute(batchUpdateRequest) as? NSBatchUpdateResult print("Nombre de registres actualitzats: \(batchUpdateResult?.result ?? 0)") } catch { print("Error al actualitzar en batch: \(error)") }
Utilitzar NSBatchDeleteRequest
Per eliminar múltiples registres de manera eficient:
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = Person.fetchRequest() let batchDeleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest) do { try context.execute(batchDeleteRequest) } catch { print("Error al eliminar en batch: \(error)") }
Exercicis Pràctics
Exercici 1: Crear i Guardar Objectes
- Crea una nova entitat anomenada
Car
amb els atributsmake
(String) iyear
(Integer16). - Escriu el codi per crear i guardar un nou objecte
Car
.
Exercici 2: Llegir i Mostrar Objectes
- Escriu el codi per llegir tots els objectes
Car
de la base de dades i mostrar-los en la consola.
Exercici 3: Actualitzar Objectes
- Escriu el codi per actualitzar l'atribut
year
d'un objecteCar
existent.
Exercici 4: Eliminar Objectes
- Escriu el codi per eliminar un objecte
Car
de la base de dades.
Solucions
Solució Exercici 1
let newCar = Car(context: context) newCar.make = "Toyota" newCar.year = 2020 do { try context.save() } catch { print("Error al guardar: \(error)") }
Solució Exercici 2
let request: NSFetchRequest<Car> = Car.fetchRequest() do { let cars = try context.fetch(request) for car in cars { print("Marca: \(car.make), Any: \(car.year)") } } catch { print("Error al llegir: \(error)") }
Solució Exercici 3
func updateCar(car: Car) { car.year = 2021 do { try context.save() } catch { print("Error al actualitzar: \(error)") } }
Solució Exercici 4
func deleteCar(car: Car) { context.delete(car) do { try context.save() } catch { print("Error al eliminar: \(error)") } }
Conclusió
En aquesta secció, hem après a configurar Core Data en un projecte de Swift, crear models de dades, i realitzar operacions CRUD. També hem vist com optimitzar el rendiment de Core Data utilitzant operacions en batch. Amb aquests coneixements, estàs preparat per gestionar dades de manera eficient en les teves aplicacions iOS.
Curs de Programació en Swift
Mòdul 1: Introducció a Swift
- Introducció a Swift
- Configuració de l'Entorn de Desenvolupament
- El Teu Primer Programa en Swift
- Sintaxi i Estructura Bàsica
- Variables i Constants
- Tipus de Dades
Mòdul 2: Flux de Control
Mòdul 3: Funcions i Closures
- Definició i Crida de Funcions
- Paràmetres de Funció i Valors de Retorn
- Closures
- Funcions d'Ordre Superior
Mòdul 4: Programació Orientada a Objectes
Mòdul 5: Swift Avançat
Mòdul 6: Swift i Desenvolupament iOS
- Introducció al Desenvolupament iOS
- Conceptes Bàsics de UIKit
- Storyboards i Interface Builder
- Xarxes en Swift
- Core Data
- Conceptes Bàsics de SwiftUI