iOS: Sviluppo App iPhone & 
iPad 
Dario Pizzuto 
1
Core Data 
2
Core Data 
Argomenti! 
• Cosa è! 
• Composizione! 
• Utilizzo! 
• Framework terze parti 
3
Core Data Intro 
4
Core Data 
Core Data! 
• Fornisce un sistema di gestione 
automatizzato e generalizzato per i 
task comuni associati alle entità e le 
loro relazioni con altre entità! 
• Persistente! 
• Si basa su Sqlite 
5
Core Data 
Core Data! 
• Relazioni tra entità! 
• Validazione dati! 
• Selezione e filtro sui dati! 
• Full support KVC e KVO! 
• Metodi concreti per creare query 
6 
sofisticate
Core Data 
Perché Core Data - vantaggi! 
• Gestione semplice model-layer! 
• Riduzione codice da scrivere! 
• Ottimizzato per il sistema operativo 
7
Core Data 
Perché Core Data - svantaggi! 
• Curva di apprendimento lenta! 
• Sistema complesso da padroneggiare 
8
Core Data 
Cosa non è Core Data! 
• Non è un database relazionale seppur 
abbia alcuni principi di esso e utilizzi 
Sqlite! 
• Riduce il codice da scrivere ma non lo 
elimina per magia! 
9
Core Data Basics 
10
Core Data 
Core Data basics! 
• È possibile scrivere un’App che usi 
metodi persistenti e non Core Data! 
• In tal caso è necessario scrivere tutti i 
metodi per write, retrieve, update…. 
11
Core Data 
12 
Esempio gestione 
manuale
Core Data 
13 
Esempio gestione 
Core Data
Core Data 
14 
Core Data basics! 
• Core Data fornisce API per interagire con il 
sistema di storage! 
• Semplifica la scrittura del codice e relativa 
manutenzione! 
• Strati:! 
✓Managed Object Model! 
✓Managed Object Context! 
✓Persistent Store Coordinator
Core Data Stack 
15
Core Data 
16 
Core Data Stack
Managed Object Context 
17
Core Data 
Managed Object Contexts! 
• Possiamo vederlo come “Tavolo di lavoro”! 
• Uno strato di bozza che permette di 
lasciare inalterato il “vero” storage! 
• Tiene traccia dei cambiamenti sul modello 
dati! 
• Trasmissione delle modifiche attraverso 
azione esplicita di salvataggio 
18
Core Data 
Managed Object Contexts! 
• Tipico utilizzo è il retrieve dei dati, 
definito tecnicamente come Fetch 
Request! 
• Es.! 
✓Enumerare tutti gli impiegati 
19
Core Data 
20 
Fetch Request
Persistent Store 
Coordinator 
21
Core Data 
Persistent Store Coordinator! 
• Coordina la memorizzazione fisica dei 
dati! 
• È possibile associare un solo 
managed object model per store 
coordinator 
22
Core Data 
23 
Persistent Store 
Coordinator
Core Data 
Persistent Store! 
• Si occupa di scrivere i dati su file 
attraverso le istruzioni del persistent 
store coordinator! 
• Associato singolarmente ad un file o 
altri sistemi di archiviazione! 
• Di solito non usato in modo esplicito 
se non in alcuni casi 
24
Managed Object Model 
25
Core Data 
Managed Object Model! 
• Modello di dato Core Data! 
• Riconducibili ad una collezione di Entità! 
• Possiamo compararlo allo schema di 
un database relazionale! 
• Utilizzo attraverso la classe 
NSManagedObjectModel 
26
Core Data 
27 
Managed Object Model
Core Data 
28 
Entity! 
• Modello contiene entità! 
• Importante definire il nome e la classe 
che rappresenta l’entità a runtime! 
• Utilizzo dalla classe 
NSEntityDescription! 
• Può avere attributi e relazioni! 
• Può ereditare da altre entità astratte
Core Data 
Attributes! 
• Sono gli attributi dell’entità! 
• Es.! 
✓Name! 
✓Age! 
• Vari tipi supportati da Core Data 
29
Core Data 
Relationships! 
• Definiscono le relazioni tra le entità! 
• Supportate! 
✓relazione uno a uno ! 
✓relazione uno a molti! 
• Politiche di cancellazione e update 
30 
gerarchico
Xcode 
31
Core Data 
Xcode! 
• Definisce progetto template per 
utilizzo di Core Data! 
• Fornisce tutti gli strumenti per iniziare 
a lavorare con Core Data 
32
Core Data 
33 
New Project
Core Data 
34 
New Project 
Core Data Model
Core Data 
35 
Core Data Model
Core Data 
36 
AppDelegate
Core Data 
AppDelegate! 
• Definisce le properties per lavorare 
con lo stack (read-only)! 
• Definisce la locazione di storage del 
file ed il suo nome! 
• Definisce un metodo di salvataggio 
37 
del context
NSManagedObject 
38
Core Data 
NSManagedObject! 
• Classe usata per rappresentare 
l’entità del nostro modello! 
• Tutte le entità dello schema saranno 
subclass di NSManagedObject 
39
Core Data 
40 
NSManagedObject
Core Data 
41 
NSManagedObject
Core Data 
42 
NSManagedObject
Core Data 
43 
NSManagedObject
Save data 
44
Core Data 
Save Data! 
• Inserire un nuovo record in una entità! 
• Due modalità differenti! 
✓NSManagedObject! 
✓Sublcass NSManagedObject 
45
Core Data 
46 
Save Data! 
1. Inizializzare il context! 
2. Istanziare un oggetto di tipo 
NSManagedObject! 
3. Set dei dati sull’oggetto 
NSManagedObject! 
4. Salvataggio del context
Core Data 
Save Data NSManagedObject & KVC 
47
Core Data 
Save Data NSManagedObject subclass 
48
Retrieve data 
49
Core Data 
50 
Retrieve Data! 
1. Inizializzare il context! 
2. Istanziare una NSFetchRequest! 
3. Istanziare e set dati NSPredicate 
(solo se desidero filtro sui dati)! 
4. Eseguire la fetch request sul context! 
5. Parse del risultato
Core Data 
Retrieve NSManagedObject 
51
Delete data 
52
Core Data 
53 
Delete Data! 
1. Inizializzare il context! 
2. Istanziare una fetch request! 
3. Istanziare e set dati NSPredicate! 
4. Eseguire la fetch request! 
5. Per ogni risultato trovato, eseguire 
eliminazione dal context! 
6. Salvataggio del context
Core Data 
Delete NSManagedObject 
54
Relationship 
55
Core Data 
Relationships! 
• È possibile definire delle relazioni 
all’interno del Managed Object Context! 
• Relazione one-to-one! 
• Relazione one-to-many! 
• Relazione many-to-many (con qualche 
56 
trick)
Core Data 
57 
Relationship
Core Data 
Relationships! 
• Creazione modello come visto 
precedentemente 
58
Core Data 
59 
Relationship 
Interface 
Implementation
Save data with 
relationship 
60
Core Data 
Save Data relationship! 
1. Inizializzare il context! 
2. Creare un oggetto Employee e set degli 
61 
attributi! 
3. Creare un oggetto Office e set degli 
attributi! 
4. Add Employee object! 
5. Salvataggio del context
Core Data 
Save data with relationship 
62
Retrieve data with 
relationship 
63
Core Data 
Retrieve Data with relationship! 
1. Inizializzare il context! 
2. Istanziare una NSFetchRequest! 
3. Istanziare e set dati NSPredicate (solo se 
desidero filtro sui dati)! 
4. Eseguire la fetch request sul context! 
5. Parse del risultato! 
6. Parse degli oggetti trovati sulla relazione 
64
Core Data 
Retrieve data with relationship 
65
Delete data with 
relationship 
66
Core Data 
67 
Delete Data with relationship! 
1. Inizializzare il context! 
2. Istanziare una NSFetchRequest per la ricerca dell’entità 
relazionata da eliminare! 
3. Istanziare e set dati NSPredicate (dati entità da eliminare)! 
4. Eseguire la fetch request sul context! 
5. Parse del risultato! 
6. Istanziare una NSFetchRequest sull’entità che contiene 
l’elemento da eliminare! 
7. Parse del risultato! 
8. Invocare removeObject:entToDelete sul managedObject 
trovato al passo 7 ! 
9. Salvataggio del context
Core Data 
Delete data with relationship 
68
Software Utili 
69
Core Data 
Core Data Editor! 
• Utile per visualizzare le informazioni 
salvate su Core Data runtime! 
• Core Data Editor link GitHub 
70
Core Data 
71 
Core Data Editor
Core Data 
MagicalRecord! 
• Framework di terze parti che 
semplifica le operazioni su Core Data! 
• MagicalRecord GitHub 
72
Core Data 
Ulteriori approfondimenti! 
Core Data 
73
Domande ? 
74
Let’s Code 
75
Core Data 
Let’s Code! 
✦Creare un modello con almeno 5 
attributi e provare ad inserire un 
record, recuperare un record ed 
eliminare un record senza l’uso del 
KVC 
76

iOS_Course_13

  • 1.
    iOS: Sviluppo AppiPhone & iPad Dario Pizzuto 1
  • 2.
  • 3.
    Core Data Argomenti! • Cosa è! • Composizione! • Utilizzo! • Framework terze parti 3
  • 4.
  • 5.
    Core Data CoreData! • Fornisce un sistema di gestione automatizzato e generalizzato per i task comuni associati alle entità e le loro relazioni con altre entità! • Persistente! • Si basa su Sqlite 5
  • 6.
    Core Data CoreData! • Relazioni tra entità! • Validazione dati! • Selezione e filtro sui dati! • Full support KVC e KVO! • Metodi concreti per creare query 6 sofisticate
  • 7.
    Core Data PerchéCore Data - vantaggi! • Gestione semplice model-layer! • Riduzione codice da scrivere! • Ottimizzato per il sistema operativo 7
  • 8.
    Core Data PerchéCore Data - svantaggi! • Curva di apprendimento lenta! • Sistema complesso da padroneggiare 8
  • 9.
    Core Data Cosanon è Core Data! • Non è un database relazionale seppur abbia alcuni principi di esso e utilizzi Sqlite! • Riduce il codice da scrivere ma non lo elimina per magia! 9
  • 10.
  • 11.
    Core Data CoreData basics! • È possibile scrivere un’App che usi metodi persistenti e non Core Data! • In tal caso è necessario scrivere tutti i metodi per write, retrieve, update…. 11
  • 12.
    Core Data 12 Esempio gestione manuale
  • 13.
    Core Data 13 Esempio gestione Core Data
  • 14.
    Core Data 14 Core Data basics! • Core Data fornisce API per interagire con il sistema di storage! • Semplifica la scrittura del codice e relativa manutenzione! • Strati:! ✓Managed Object Model! ✓Managed Object Context! ✓Persistent Store Coordinator
  • 15.
  • 16.
    Core Data 16 Core Data Stack
  • 17.
  • 18.
    Core Data ManagedObject Contexts! • Possiamo vederlo come “Tavolo di lavoro”! • Uno strato di bozza che permette di lasciare inalterato il “vero” storage! • Tiene traccia dei cambiamenti sul modello dati! • Trasmissione delle modifiche attraverso azione esplicita di salvataggio 18
  • 19.
    Core Data ManagedObject Contexts! • Tipico utilizzo è il retrieve dei dati, definito tecnicamente come Fetch Request! • Es.! ✓Enumerare tutti gli impiegati 19
  • 20.
    Core Data 20 Fetch Request
  • 21.
  • 22.
    Core Data PersistentStore Coordinator! • Coordina la memorizzazione fisica dei dati! • È possibile associare un solo managed object model per store coordinator 22
  • 23.
    Core Data 23 Persistent Store Coordinator
  • 24.
    Core Data PersistentStore! • Si occupa di scrivere i dati su file attraverso le istruzioni del persistent store coordinator! • Associato singolarmente ad un file o altri sistemi di archiviazione! • Di solito non usato in modo esplicito se non in alcuni casi 24
  • 25.
  • 26.
    Core Data ManagedObject Model! • Modello di dato Core Data! • Riconducibili ad una collezione di Entità! • Possiamo compararlo allo schema di un database relazionale! • Utilizzo attraverso la classe NSManagedObjectModel 26
  • 27.
    Core Data 27 Managed Object Model
  • 28.
    Core Data 28 Entity! • Modello contiene entità! • Importante definire il nome e la classe che rappresenta l’entità a runtime! • Utilizzo dalla classe NSEntityDescription! • Può avere attributi e relazioni! • Può ereditare da altre entità astratte
  • 29.
    Core Data Attributes! • Sono gli attributi dell’entità! • Es.! ✓Name! ✓Age! • Vari tipi supportati da Core Data 29
  • 30.
    Core Data Relationships! • Definiscono le relazioni tra le entità! • Supportate! ✓relazione uno a uno ! ✓relazione uno a molti! • Politiche di cancellazione e update 30 gerarchico
  • 31.
  • 32.
    Core Data Xcode! • Definisce progetto template per utilizzo di Core Data! • Fornisce tutti gli strumenti per iniziare a lavorare con Core Data 32
  • 33.
    Core Data 33 New Project
  • 34.
    Core Data 34 New Project Core Data Model
  • 35.
    Core Data 35 Core Data Model
  • 36.
    Core Data 36 AppDelegate
  • 37.
    Core Data AppDelegate! • Definisce le properties per lavorare con lo stack (read-only)! • Definisce la locazione di storage del file ed il suo nome! • Definisce un metodo di salvataggio 37 del context
  • 38.
  • 39.
    Core Data NSManagedObject! • Classe usata per rappresentare l’entità del nostro modello! • Tutte le entità dello schema saranno subclass di NSManagedObject 39
  • 40.
    Core Data 40 NSManagedObject
  • 41.
    Core Data 41 NSManagedObject
  • 42.
    Core Data 42 NSManagedObject
  • 43.
    Core Data 43 NSManagedObject
  • 44.
  • 45.
    Core Data SaveData! • Inserire un nuovo record in una entità! • Due modalità differenti! ✓NSManagedObject! ✓Sublcass NSManagedObject 45
  • 46.
    Core Data 46 Save Data! 1. Inizializzare il context! 2. Istanziare un oggetto di tipo NSManagedObject! 3. Set dei dati sull’oggetto NSManagedObject! 4. Salvataggio del context
  • 47.
    Core Data SaveData NSManagedObject & KVC 47
  • 48.
    Core Data SaveData NSManagedObject subclass 48
  • 49.
  • 50.
    Core Data 50 Retrieve Data! 1. Inizializzare il context! 2. Istanziare una NSFetchRequest! 3. Istanziare e set dati NSPredicate (solo se desidero filtro sui dati)! 4. Eseguire la fetch request sul context! 5. Parse del risultato
  • 51.
    Core Data RetrieveNSManagedObject 51
  • 52.
  • 53.
    Core Data 53 Delete Data! 1. Inizializzare il context! 2. Istanziare una fetch request! 3. Istanziare e set dati NSPredicate! 4. Eseguire la fetch request! 5. Per ogni risultato trovato, eseguire eliminazione dal context! 6. Salvataggio del context
  • 54.
    Core Data DeleteNSManagedObject 54
  • 55.
  • 56.
    Core Data Relationships! • È possibile definire delle relazioni all’interno del Managed Object Context! • Relazione one-to-one! • Relazione one-to-many! • Relazione many-to-many (con qualche 56 trick)
  • 57.
    Core Data 57 Relationship
  • 58.
    Core Data Relationships! • Creazione modello come visto precedentemente 58
  • 59.
    Core Data 59 Relationship Interface Implementation
  • 60.
    Save data with relationship 60
  • 61.
    Core Data SaveData relationship! 1. Inizializzare il context! 2. Creare un oggetto Employee e set degli 61 attributi! 3. Creare un oggetto Office e set degli attributi! 4. Add Employee object! 5. Salvataggio del context
  • 62.
    Core Data Savedata with relationship 62
  • 63.
    Retrieve data with relationship 63
  • 64.
    Core Data RetrieveData with relationship! 1. Inizializzare il context! 2. Istanziare una NSFetchRequest! 3. Istanziare e set dati NSPredicate (solo se desidero filtro sui dati)! 4. Eseguire la fetch request sul context! 5. Parse del risultato! 6. Parse degli oggetti trovati sulla relazione 64
  • 65.
    Core Data Retrievedata with relationship 65
  • 66.
    Delete data with relationship 66
  • 67.
    Core Data 67 Delete Data with relationship! 1. Inizializzare il context! 2. Istanziare una NSFetchRequest per la ricerca dell’entità relazionata da eliminare! 3. Istanziare e set dati NSPredicate (dati entità da eliminare)! 4. Eseguire la fetch request sul context! 5. Parse del risultato! 6. Istanziare una NSFetchRequest sull’entità che contiene l’elemento da eliminare! 7. Parse del risultato! 8. Invocare removeObject:entToDelete sul managedObject trovato al passo 7 ! 9. Salvataggio del context
  • 68.
    Core Data Deletedata with relationship 68
  • 69.
  • 70.
    Core Data CoreData Editor! • Utile per visualizzare le informazioni salvate su Core Data runtime! • Core Data Editor link GitHub 70
  • 71.
    Core Data 71 Core Data Editor
  • 72.
    Core Data MagicalRecord! • Framework di terze parti che semplifica le operazioni su Core Data! • MagicalRecord GitHub 72
  • 73.
    Core Data Ulterioriapprofondimenti! Core Data 73
  • 74.
  • 75.
  • 76.
    Core Data Let’sCode! ✦Creare un modello con almeno 5 attributi e provare ad inserire un record, recuperare un record ed eliminare un record senza l’uso del KVC 76