Core Data Permanent datalagring Applikationsutveckling för iphone och ipad, 725G60 Alek Åström, ioskurs@mralek.se
Agenda
Agenda Vad är Core Data?
Agenda Vad är Core Data? Varför använda det?
Agenda Vad är Core Data? Varför använda det? Beståndsdelarna i ett Core Data-projekt
Agenda Vad är Core Data? Varför använda det? Beståndsdelarna i ett Core Data-projekt Designa Core Data-modellen
Agenda Vad är Core Data? Varför använda det? Beståndsdelarna i ett Core Data-projekt Designa Core Data-modellen Hämta, ändra, spara och ta bort Core Data-objekt
Agenda Vad är Core Data? Varför använda det? Beståndsdelarna i ett Core Data-projekt Designa Core Data-modellen Hämta, ändra, spara och ta bort Core Data-objekt Demo genom hela screencasten
Vad är Core Data?
Vad är Core Data? Ett ramverk för att hantera permanent datalagring av objektgrafer
Vad är Core Data? Ett ramverk för att hantera permanent datalagring av objektgrafer Hjälper dig att spara modell-objekt till en fil och hämta tillbaka dem igen
Vad är Core Data? Ett ramverk för att hantera permanent datalagring av objektgrafer Hjälper dig att spara modell-objekt till en fil och hämta tillbaka dem igen Abstraherar bort hur objekten lagras så att du kan använda objekt oberoende av ifall de sparas i en SQL-databas eller som binärfiler eller xmler
Vad är Core Data? Ett ramverk för att hantera permanent datalagring av objektgrafer Hjälper dig att spara modell-objekt till en fil och hämta tillbaka dem igen Abstraherar bort hur objekten lagras så att du kan använda objekt oberoende av ifall de sparas i en SQL-databas eller som binärfiler eller xmler Använder ett diagram och grafiska verktyg för att beskriva objekt med attribut och relationer
Vad är Core Data? Ett ramverk för att hantera permanent datalagring av objektgrafer Hjälper dig att spara modell-objekt till en fil och hämta tillbaka dem igen Abstraherar bort hur objekten lagras så att du kan använda objekt oberoende av ifall de sparas i en SQL-databas eller som binärfiler eller xmler Använder ett diagram och grafiska verktyg för att beskriva objekt med attribut och relationer Avancerade funktioner som ej tas upp här:
Vad är Core Data? Ett ramverk för att hantera permanent datalagring av objektgrafer Hjälper dig att spara modell-objekt till en fil och hämta tillbaka dem igen Abstraherar bort hur objekten lagras så att du kan använda objekt oberoende av ifall de sparas i en SQL-databas eller som binärfiler eller xmler Använder ett diagram och grafiska verktyg för att beskriva objekt med attribut och relationer Avancerade funktioner som ej tas upp här: Hanterar ändringar av objekt för tex automatisk undo/redo
Vad är Core Data? Ett ramverk för att hantera permanent datalagring av objektgrafer Hjälper dig att spara modell-objekt till en fil och hämta tillbaka dem igen Abstraherar bort hur objekten lagras så att du kan använda objekt oberoende av ifall de sparas i en SQL-databas eller som binärfiler eller xmler Använder ett diagram och grafiska verktyg för att beskriva objekt med attribut och relationer Avancerade funktioner som ej tas upp här: Hanterar ändringar av objekt för tex automatisk undo/redo Kan integreras med icloud för att dela modellobjekt mellan enheter
Strukturen i Core Data Apple
Strukturen i Core Data Ett antal klasser samverkar som i en stapel. Apple
Strukturen i Core Data Ett antal klasser samverkar som i en stapel. I en applikation jobbar man mest med det översta lagret Apple
Strukturen i Core Data Ett antal klasser samverkar som i en stapel. I en applikation jobbar man mest med det översta lagret De övriga lagren sätter man ofta upp en gång i appdelegaten. Apple
Strukturen i Core Data Ett antal klasser samverkar som i en stapel. I en applikation jobbar man mest med det översta lagret De övriga lagren sätter man ofta upp en gång i appdelegaten. Vi går nerifrån och upp! Apple
Persistent stores och NSPersistentStoreCoordinator Apple
Persistent stores och NSPersistentStoreCoordinator Core Data kan använda sig av ett antal olika filformat för att spara data Apple
Persistent stores och NSPersistentStoreCoordinator Core Data kan använda sig av ett antal olika filformat för att spara data Varje fil är en persistent store Apple
Persistent stores och NSPersistentStoreCoordinator Core Data kan använda sig av ett antal olika filformat för att spara data Varje fil är en persistent store Använder vi SQLite har vi i 9 fall av 10 en enda sqlite-fil med all data (rekommenderas) Apple
Persistent stores och NSPersistentStoreCoordinator Core Data kan använda sig av ett antal olika filformat för att spara data Varje fil är en persistent store Använder vi SQLite har vi i 9 fall av 10 en enda sqlite-fil med all data (rekommenderas) NSPersistentStoreCoordinator utför själva filoperationerna när objekt ska sparas och hämtas. Apple
Persistent stores och NSPersistentStoreCoordinator Core Data kan använda sig av ett antal olika filformat för att spara data Varje fil är en persistent store Använder vi SQLite har vi i 9 fall av 10 en enda sqlite-fil med all data (rekommenderas) NSPersistentStoreCoordinator utför själva filoperationerna när objekt ska sparas och hämtas. Apple Kan hålla reda på flera persistent stores
Persistent stores och NSPersistentStoreCoordinator Core Data kan använda sig av ett antal olika filformat för att spara data Varje fil är en persistent store Använder vi SQLite har vi i 9 fall av 10 en enda sqlite-fil med all data (rekommenderas) NSPersistentStoreCoordinator utför själva filoperationerna när objekt ska sparas och hämtas. Apple Kan hålla reda på flera persistent stores På ios används den oftast med endast en persistent store i form av en sqlite-fil
Persistent stores och NSPersistentStoreCoordinator Core Data kan använda sig av ett antal olika filformat för att spara data Varje fil är en persistent store Använder vi SQLite har vi i 9 fall av 10 en enda sqlite-fil med all data (rekommenderas) NSPersistentStoreCoordinator utför själva filoperationerna när objekt ska sparas och hämtas. Apple Kan hålla reda på flera persistent stores På ios används den oftast med endast en persistent store i form av en sqlite-fil Vi interagerar inte med den i vår kod
Managed Object Model Apple
Managed Object Model En managed object model innehåller information om vilka entiteter som finns, vilka attribut de har och vilka relationer som finns mellan dem Apple
Managed Object Model En managed object model innehåller information om vilka entiteter som finns, vilka attribut de har och vilka relationer som finns mellan dem Skapas grafiskt i XCode Apple
Managed Object Model En managed object model innehåller information om vilka entiteter som finns, vilka attribut de har och vilka relationer som finns mellan dem Skapas grafiskt i XCode Persistent store coordinatorn mappar data i vår persistent store med beskrivningen i vår modell Apple
Managed Object Context Apple
Managed Object Context Ingångspunkten för alla interaktioner med databasen Apple
Managed Object Context Ingångspunkten för alla interaktioner med databasen Hämtning Apple
Managed Object Context Ingångspunkten för alla interaktioner med databasen Hämtning Insättning Apple
Managed Object Context Ingångspunkten för alla interaktioner med databasen Hämtning Insättning Borttagning Apple
Managed Object Context Ingångspunkten för alla interaktioner med databasen Hämtning Insättning Borttagning Apple En temporär lagringsplats för databasobjekt i minnet
Managed Object Context Ingångspunkten för alla interaktioner med databasen Hämtning Insättning Borttagning Apple En temporär lagringsplats för databasobjekt i minnet Hämtar data från sin persistent store coordinator
Managed Object Context Ingångspunkten för alla interaktioner med databasen Hämtning Insättning Borttagning Apple En temporär lagringsplats för databasobjekt i minnet Hämtar data från sin persistent store coordinator Objekt inuti en managed object context kan ändras och tas bort
Managed Object Context Ingångspunkten för alla interaktioner med databasen Hämtning Insättning Borttagning Apple En temporär lagringsplats för databasobjekt i minnet Hämtar data från sin persistent store coordinator Objekt inuti en managed object context kan ändras och tas bort Ändringarna sparas i minnet tills man ropar på save, då slussas de vidare till persistent store coordinator
Managed Object Context Ingångspunkten för alla interaktioner med databasen Hämtning Insättning Borttagning Apple En temporär lagringsplats för databasobjekt i minnet Hämtar data från sin persistent store coordinator Objekt inuti en managed object context kan ändras och tas bort Ändringarna sparas i minnet tills man ropar på save, då slussas de vidare till persistent store coordinator Ej trådsäker! Skapa flera mot samma persistent store coordinator
Managed Object Managed Object Apple
Managed Object Ett databasobjekt som motsvarar en entitet i en managed objekt model Managed Object Apple
Managed Object Ett databasobjekt som motsvarar en entitet i en managed objekt model Kan ha attribut (tänk properties) Managed Object Apple
Managed Object Ett databasobjekt som motsvarar en entitet i en managed objekt model Kan ha attribut (tänk properties) Relationer (properties till andra managed objects) Managed Object Apple
Managed Object Ett databasobjekt som motsvarar en entitet i en managed objekt model Kan ha attribut (tänk properties) Relationer (properties till andra managed objects) Managed Object Modell-objekten i era appar Apple
Managed Object Ett databasobjekt som motsvarar en entitet i en managed objekt model Kan ha attribut (tänk properties) Relationer (properties till andra managed objects) Managed Object Modell-objekten i era appar Kan subklassas för olika entiteter Apple
Managed Object Ett databasobjekt som motsvarar en entitet i en managed objekt model Kan ha attribut (tänk properties) Relationer (properties till andra managed objects) Managed Object Modell-objekten i era appar Kan subklassas för olika entiteter Tillhör en managed object context Apple
Managed Object Ett databasobjekt som motsvarar en entitet i en managed objekt model Kan ha attribut (tänk properties) Relationer (properties till andra managed objects) Managed Object Modell-objekten i era appar Kan subklassas för olika entiteter Tillhör en managed object context Ändringar i objektet finns bara i minnet tills contexten sparas Apple
Hur använder vi Core Data?
Hur använder vi Core Data? 1.Skapa ett nytt tomt empty window-projekt med Core Data
Hur använder vi Core Data? 1.Skapa ett nytt tomt empty window-projekt med Core Data 2.Copy/pastea kod för att sätta upp Core Data till er appdelegat och ställ in filnamn
Hur använder vi Core Data? 1.Skapa ett nytt tomt empty window-projekt med Core Data 2.Copy/pastea kod för att sätta upp Core Data till er appdelegat och ställ in filnamn 3.Länka till Core Data-ramverket
Hur använder vi Core Data? 1.Skapa ett nytt tomt empty window-projekt med Core Data 2.Copy/pastea kod för att sätta upp Core Data till er appdelegat och ställ in filnamn 3.Länka till Core Data-ramverket 4.Skapa en managed object model och designa de entiteter ni ska använda (skapa eventuellt några fetch requests i modellen)
Hur använder vi Core Data? 1.Skapa ett nytt tomt empty window-projekt med Core Data 2.Copy/pastea kod för att sätta upp Core Data till er appdelegat och ställ in filnamn 3.Länka till Core Data-ramverket 4.Skapa en managed object model och designa de entiteter ni ska använda (skapa eventuellt några fetch requests i modellen) 5.Skapa NSManagedObject-subklasser för entiteterna
Hur använder vi Core Data? 1.Skapa ett nytt tomt empty window-projekt med Core Data 2.Copy/pastea kod för att sätta upp Core Data till er appdelegat och ställ in filnamn 3.Länka till Core Data-ramverket 4.Skapa en managed object model och designa de entiteter ni ska använda (skapa eventuellt några fetch requests i modellen) 5.Skapa NSManagedObject-subklasser för entiteterna 6.Skicka vidare appdelegatens managedobjectcontext till alla vy-kontroller som ska komma åt Core Data
Hur använder vi Core Data? 1.Skapa ett nytt tomt empty window-projekt med Core Data 2.Copy/pastea kod för att sätta upp Core Data till er appdelegat och ställ in filnamn 3.Länka till Core Data-ramverket 4.Skapa en managed object model och designa de entiteter ni ska använda (skapa eventuellt några fetch requests i modellen) 5.Skapa NSManagedObject-subklasser för entiteterna 6.Skicka vidare appdelegatens managedobjectcontext till alla vy-kontroller som ska komma åt Core Data 7.Använd managedobjectcontext för att hämta objekt
Designa en managed object model Demo
Att hämta managed objects med en ny fetch request
Att hämta managed objects med en ny fetch request 1.Skapa en fetchrequest med [NSFetchRequest fetchrequestwithentityname:]
Att hämta managed objects med en ny fetch request 1.Skapa en fetchrequest med [NSFetchRequest fetchrequestwithentityname:] 1.Entitetsnamnen måste matcha en entitet i modellen
Att hämta managed objects med en ny fetch request 1.Skapa en fetchrequest med [NSFetchRequest fetchrequestwithentityname:] 1.Entitetsnamnen måste matcha en entitet i modellen 2.Sätt eventuellt en NSPredicate (filtrering, t ex (age > 18) )
Att hämta managed objects med en ny fetch request 1.Skapa en fetchrequest med [NSFetchRequest fetchrequestwithentityname:] 1.Entitetsnamnen måste matcha en entitet i modellen 2.Sätt eventuellt en NSPredicate (filtrering, t ex (age > 18) ) 3.Sätt eventuellt sort descriptors för att sortera
Att hämta managed objects med en ny fetch request 1.Skapa en fetchrequest med [NSFetchRequest fetchrequestwithentityname:] 1.Entitetsnamnen måste matcha en entitet i modellen 2.Sätt eventuellt en NSPredicate (filtrering, t ex (age > 18) ) 3.Sätt eventuellt sort descriptors för att sortera 4.Kör fetch requesten på en managed object context [self.managedobjectcontext executefetchrequest: error:]
Att hämta managed objects med en ny fetch request 1.Skapa en fetchrequest med [NSFetchRequest fetchrequestwithentityname:] 1.Entitetsnamnen måste matcha en entitet i modellen 2.Sätt eventuellt en NSPredicate (filtrering, t ex (age > 18) ) 3.Sätt eventuellt sort descriptors för att sortera 4.Kör fetch requesten på en managed object context [self.managedobjectcontext executefetchrequest: error:] NSFetchRequest har även fler properties
Att hämta managed objects med en ny fetch request 1.Skapa en fetchrequest med [NSFetchRequest fetchrequestwithentityname:] 1.Entitetsnamnen måste matcha en entitet i modellen 2.Sätt eventuellt en NSPredicate (filtrering, t ex (age > 18) ) 3.Sätt eventuellt sort descriptors för att sortera 4.Kör fetch requesten på en managed object context [self.managedobjectcontext executefetchrequest: error:] NSFetchRequest har även fler properties Ange hur många som ska hämtas
Att hämta managed objects med en ny fetch request 1.Skapa en fetchrequest med [NSFetchRequest fetchrequestwithentityname:] 1.Entitetsnamnen måste matcha en entitet i modellen 2.Sätt eventuellt en NSPredicate (filtrering, t ex (age > 18) ) 3.Sätt eventuellt sort descriptors för att sortera 4.Kör fetch requesten på en managed object context [self.managedobjectcontext executefetchrequest: error:] NSFetchRequest har även fler properties Ange hur många som ska hämtas Hämta enskilda properties istället för hela objekt
Att hämta managed objects med en ny fetch request 1.Skapa en fetchrequest med [NSFetchRequest fetchrequestwithentityname:] 1.Entitetsnamnen måste matcha en entitet i modellen 2.Sätt eventuellt en NSPredicate (filtrering, t ex (age > 18) ) 3.Sätt eventuellt sort descriptors för att sortera 4.Kör fetch requesten på en managed object context [self.managedobjectcontext executefetchrequest: error:] NSFetchRequest har även fler properties Ange hur många som ska hämtas Hämta enskilda properties istället för hela objekt...
Att hämta managed objects med en fetch request template
Att hämta managed objects med en fetch request template 1.Hämta modellen med self.managedobjectcontext.persistentstorecoordinator.managedobjectmodel
Att hämta managed objects med en fetch request template 1.Hämta modellen med self.managedobjectcontext.persistentstorecoordinator.managedobjectmodel 2.Hämta en fetch request från modellen med namnet på mallen [model fetchrequestfromtemplatewithname: substitutionvariables:]
Att hämta managed objects med en fetch request template 1.Hämta modellen med self.managedobjectcontext.persistentstorecoordinator.managedobjectmodel 2.Hämta en fetch request från modellen med namnet på mallen [model fetchrequestfromtemplatewithname: substitutionvariables:] 1.Om er fetch request använder variabeler för att filtrera data, skriv in dem i en dictionary, annars skicka med nil som substitutionvariables.
Att hämta managed objects med en fetch request template 1.Hämta modellen med self.managedobjectcontext.persistentstorecoordinator.managedobjectmodel 2.Hämta en fetch request från modellen med namnet på mallen [model fetchrequestfromtemplatewithname: substitutionvariables:] 1.Om er fetch request använder variabeler för att filtrera data, skriv in dem i en dictionary, annars skicka med nil som substitutionvariables. 3.Kör fetch requesten på en managed object context [self.managedobjectcontext executefetchrequest: error:]
One line fetching
One line fetching Category för NSManagedObjectContext på github.com/mralek/ios-utilities
One line fetching Category för NSManagedObjectContext på github.com/mralek/ios-utilities Utför båda metoderna med en rad kod
One line fetching Category för NSManagedObjectContext på github.com/mralek/ios-utilities Utför båda metoderna med en rad kod Smidigt när ens fetch requests inte är alltför avancerade
Skapa, ändring och ta bort objekt
Skapa, ändring och ta bort objekt Skapa nya objekt med [NSEntityDescription insertnewobjectforentityforname: inmanagedobjectcontext:];
Skapa, ändring och ta bort objekt Skapa nya objekt med [NSEntityDescription insertnewobjectforentityforname: inmanagedobjectcontext:]; Spara med [managedobjectcontext save:]
Skapa, ändring och ta bort objekt Skapa nya objekt med [NSEntityDescription insertnewobjectforentityforname: inmanagedobjectcontext:]; Spara med [managedobjectcontext save:]
Skapa, ändring och ta bort objekt Skapa nya objekt med [NSEntityDescription insertnewobjectforentityforname: inmanagedobjectcontext:]; Spara med [managedobjectcontext save:] Ändra properties som vanligt
Skapa, ändring och ta bort objekt Skapa nya objekt med [NSEntityDescription insertnewobjectforentityforname: inmanagedobjectcontext:]; Spara med [managedobjectcontext save:] Ändra properties som vanligt Spara med [managedobjectcontext save:]
Skapa, ändring och ta bort objekt Skapa nya objekt med [NSEntityDescription insertnewobjectforentityforname: inmanagedobjectcontext:]; Spara med [managedobjectcontext save:] Ändra properties som vanligt Spara med [managedobjectcontext save:]
Skapa, ändring och ta bort objekt Skapa nya objekt med [NSEntityDescription insertnewobjectforentityforname: inmanagedobjectcontext:]; Spara med [managedobjectcontext save:] Ändra properties som vanligt Spara med [managedobjectcontext save:] Ta bort objekt med [managedobjectcontext deleteobject:]
Skapa, ändring och ta bort objekt Skapa nya objekt med [NSEntityDescription insertnewobjectforentityforname: inmanagedobjectcontext:]; Spara med [managedobjectcontext save:] Ändra properties som vanligt Spara med [managedobjectcontext save:] Ta bort objekt med [managedobjectcontext deleteobject:] Spara!
Skapa, ändring och ta bort objekt Skapa nya objekt med [NSEntityDescription insertnewobjectforentityforname: inmanagedobjectcontext:]; Spara med [managedobjectcontext save:] Ändra properties som vanligt Spara med [managedobjectcontext save:] Ta bort objekt med [managedobjectcontext deleteobject:] Spara!
Skapa, ändring och ta bort objekt Skapa nya objekt med [NSEntityDescription insertnewobjectforentityforname: inmanagedobjectcontext:]; Spara med [managedobjectcontext save:] Ändra properties som vanligt Spara med [managedobjectcontext save:] Ta bort objekt med [managedobjectcontext deleteobject:] Spara! Glömde jag säga spara?
Läs mer Core Data Starting Point Core Data Tutorial for ios Core Data Programming Guide Klassreferenser för NSManagedObjectContext, NSFetchRequest Undo Architecture Core Data i table views kommer på nästa screencast! NSFetchedResultsController
Frågor?
Frågor? Ställ frågor på kursforumet
Frågor? Ställ frågor på kursforumet Maila gärna ioskurs@mralek.se
Tack!