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
- Obre Xcode i selecciona "Create a new Xcode project".
- Tria "App" i fes clic a "Next".
- Omple els camps necessaris (nom del projecte, organització, etc.).
- Assegura't de marcar l'opció "Use Core Data".
- 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
- Obre el fitxer
.xcdatamodeld
. - Fes clic al botó "+" a la part inferior per afegir una nova entitat.
- Dona un nom a la teva entitat (per exemple, "Person").
- Afegeix atributs a la teva entitat (per exemple, "name" de tipus String, "age" de tipus Integer).
Pas 4: Generar les Classes de Model
- Selecciona la teva entitat.
- A la pestanya "Editor", selecciona "Create NSManagedObject Subclass".
- 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"
- Crea una nova entitat anomenada "Book" amb els atributs "title" (String) i "author" (String).
- Genera les classes de model per a l'entitat "Book".
Exercici 2: Implementar Operacions CRUD per a "Book"
- Escriu funcions per crear, llegir, actualitzar i eliminar objectes de tipus "Book".
Solucions
Solució Exercici 1
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.
Dominar Xcode: De Principiant a Avançat
Mòdul 1: Introducció a Xcode
- Començant amb Xcode
- Entenent la Interfície de Xcode
- Creant el teu Primer Projecte Xcode
- Navegació Bàsica de Xcode
Mòdul 2: Conceptes Bàsics de Swift a Xcode
- Introducció a la Programació en Swift
- Variables i Constants
- Tipus de Dades i Operadors
- Flux de Control
- Funcions i Closures
Mòdul 3: Construint Interfícies d'Usuari
- Introducció a Interface Builder
- Dissenyant amb Storyboards
- Auto Layout i Constriccions
- Utilitzant les Previsualitzacions de Xcode
- Creant Components UI Personalitzats
Mòdul 4: Treballant amb Dades
Mòdul 5: Depuració i Proves
- Conceptes Bàsics de Depuració
- Utilitzant Breakpoints
- Proves Unitàries
- Proves d'Interfície d'Usuari
- Proves de Rendiment
Mòdul 6: Funcions Avançades de Xcode
- Utilitzant Instruments per a l'Optimització del Rendiment
- Tècniques Avançades de Depuració
- Configuracions de Compilació Personalitzades
- Scripting amb Xcode
- Integració amb Sistemes d'Integració Contínua
Mòdul 7: Desplegament d'Aplicacions
- Preparant per a la Submissió a l'App Store
- Creant Captures de Pantalla per a l'App Store
- Gestionant les Metadades de l'App Store
- Enviant la teva Aplicació
- Millors Pràctiques Post-Submissió