SlideShare a Scribd company logo
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

More Related Content

PDF
iOS_Course_6
PDF
iOS_Course_1
PDF
iOS_Course_8
PDF
iOS_Course_10
PDF
iOS_Course_4
PPTX
Analysing Existing Solutions
PDF
מצורף הסכם הצטרפות למנהלת
PPTX
E 비즈니스세미나(gtep) SNS
iOS_Course_6
iOS_Course_1
iOS_Course_8
iOS_Course_10
iOS_Course_4
Analysing Existing Solutions
מצורף הסכם הצטרפות למנהלת
E 비즈니스세미나(gtep) SNS

Viewers also liked (11)

PDF
מצגת למנהלת תבע 384
PDF
iOS_Course_16
PDF
iOS_Course_11
PDF
iOS_Course_5
PDF
iOS_Course_15
PPTX
E-MARKETING
PDF
iOS_Course_14
PDF
iOS_Course_3
PDF
iOS_Course_2
PPS
2011 12 04_www.nicepps.ro_9879_bratarile radionice, ale dacilor.
PPTX
Cyber bulling
מצגת למנהלת תבע 384
iOS_Course_16
iOS_Course_11
iOS_Course_5
iOS_Course_15
E-MARKETING
iOS_Course_14
iOS_Course_3
iOS_Course_2
2011 12 04_www.nicepps.ro_9879_bratarile radionice, ale dacilor.
Cyber bulling
Ad

Similar to iOS_Course_13 (20)

PPTX
Advanced ef code first 5.0 - EF@work
PDF
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
PDF
SQL Saturday 2019 - Event Processing with Spark
PDF
Quanto mi costa SQL Pool Serverless Synapse
PDF
PoC IoT in 1 ora
PDF
iot Saturday 2019 - PoC iot in 1 ora
PPTX
Back to Basics 4: Introduzione al partizionamento orizzontale (sharding)
PDF
Data flow
PPTX
Creare API pubbliche, come evitare gli errori comuni
PPTX
Asp.Net MVC 5
PDF
Repository pattern
PDF
Corso Java 2 - AVANZATO
PDF
Presentazione bd2
PPTX
SQL Server Benchmarking, Baselining and Workload Analysis
PDF
Sencha touch: Sviluppare un'app - 4° parte
PDF
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
PDF
Power B: Cleaning data
PDF
EE Incremental Store
PPT
Presentazione django reminiscence
PPTX
Data Profiling with Metanome
Advanced ef code first 5.0 - EF@work
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
SQL Saturday 2019 - Event Processing with Spark
Quanto mi costa SQL Pool Serverless Synapse
PoC IoT in 1 ora
iot Saturday 2019 - PoC iot in 1 ora
Back to Basics 4: Introduzione al partizionamento orizzontale (sharding)
Data flow
Creare API pubbliche, come evitare gli errori comuni
Asp.Net MVC 5
Repository pattern
Corso Java 2 - AVANZATO
Presentazione bd2
SQL Server Benchmarking, Baselining and Workload Analysis
Sencha touch: Sviluppare un'app - 4° parte
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Power B: Cleaning data
EE Incremental Store
Presentazione django reminiscence
Data Profiling with Metanome
Ad

iOS_Course_13

  • 1. iOS: Sviluppo App iPhone & iPad Dario Pizzuto 1
  • 3. Core Data Argomenti! • Cosa è! • Composizione! • Utilizzo! • Framework terze parti 3
  • 5. 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
  • 6. 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
  • 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 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
  • 11. 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
  • 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
  • 16. Core Data 16 Core Data Stack
  • 18. 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
  • 19. Core Data Managed Object Contexts! • Tipico utilizzo è il retrieve dei dati, definito tecnicamente come Fetch Request! • Es.! ✓Enumerare tutti gli impiegati 19
  • 20. Core Data 20 Fetch Request
  • 22. Core Data Persistent Store 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 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
  • 26. 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
  • 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
  • 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
  • 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
  • 45. Core Data Save Data! • 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 Save Data NSManagedObject & KVC 47
  • 48. Core Data Save Data NSManagedObject subclass 48
  • 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 Retrieve NSManagedObject 51
  • 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 Delete NSManagedObject 54
  • 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 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
  • 62. Core Data Save data with relationship 62
  • 63. Retrieve data with relationship 63
  • 64. 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
  • 65. Core Data Retrieve data 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 Delete data with relationship 68
  • 70. Core Data Core Data 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 Ulteriori approfondimenti! Core Data 73
  • 76. 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