applicazione iphone con utilizzo di coredata e uikit
TRANSCRIPT
Applicazione iPhone con utilizzo di UIKit e CoreData
Giannandrea CastaldiSoftware Engineer in [email protected]://www.exmachina.ch
Obiettivo
Design e pratiche utilizzate nello sviluppo di applicazioni iPhone
Obiettivo
Design e pratiche utilizzate nello sviluppo di applicazioni iPhone
Come utilizzare UIKit quasi esclusivamente da codice
Obiettivo
Design e pratiche utilizzate nello sviluppo di applicazioni iPhone
Come utilizzare UIKit quasi esclusivamente da codice
Come definire il persistent stack di CoreData da codice
Obiettivo
Studio
Studio
Studio
Studio
XCode: IDE di sviluppo
XCode: IDE di sviluppo
Ok!
IB: Graphical editor per GUI
IB: Graphical editor per GUI
Ok, bu
t with
cauti
on
Interface Builder
Interface Builder
No RAD (Rapid Application Development)
Interface Builder
No RAD (Rapid Application Development)
No RGD (Rapid Gui Development)
Interface Builder
No RAD (Rapid Application Development)
No RGD (Rapid Gui Development)
Alla lunga paga di più fare direttamente tutto da codice
Interface Builder
Jonathan Zdziarski: “Many of the properties you’re able to set using IB are reproducible in code. Think of IB as a GUI for code. While IB supports many of the same characteristics you
can set up, it not support all”.
CoreData model: Editor Grafico
CoreData model: Editor Grafico
No,
Than
ks
CoreData model: da codice
CoreData model: da codice
Ok!
CoreData
Core Data Programming Guide by Apple: “You typically create the
managed object model graphically using Xcode's Data Model Design tool.
(If you wish you can construct the model programmatically at runtime.)”.
i4twitties
[Demo e Project overview]
UIKit
UIKit
UIKit fornisce gli oggetti necessari per:
UIKit
UIKit fornisce gli oggetti necessari per:
•eseguire applicazioni grafiche
UIKit
UIKit fornisce gli oggetti necessari per:
•eseguire applicazioni grafiche
•MVC: visualizzare i contenuti sul video
UIKit
UIKit fornisce gli oggetti necessari per:
•eseguire applicazioni grafiche
•MVC: visualizzare i contenuti sul video
•MVC: gestire le azioni dell’utente
UIKit: UIWindow
[esempio MainWindow]
UIKit: UIView
[esempio UserCatalogViewController]
UIKit: UIViewController
UIKit: UIViewController
Due responsabilità:
UIKit: UIViewController
Due responsabilità:•visualizzare il modello sulla vista
UIKit: UIViewController
Due responsabilità:•visualizzare il modello sulla vista•far evolvere il modello sulla base delle
azioni dell’utente
UIKit: UIViewController
Due responsabilità:•visualizzare il modello sulla vista•far evolvere il modello sulla base delle
azioni dell’utente
[esempio TimeLineViewController con utilizzo di UITableView]
UIKit: UINavigationController
[esempio MainWindow]
CoreData
Offre la gestione del ciclo di vita di oggetti persistenti.
La persistenza può essere su file Sqlite, xml e binari.
CoreData: NSManagedObject
User
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
CoreData: NSManagedObject
User
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Oggetti del modello persistenti
CoreData: NSManagedObject
User
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Oggetti del modello persistenti
Insieme formano un grafo di entità e
relazioni
NSManagedObjectContext
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
NSManagedObjectContext
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Legge/scrive/rimuove gli oggetti dalla
persistenza
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
NSManagedObjectContext
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Legge/scrive/rimuove gli oggetti dalla
persistenza
Con un context si agisce su sezioni degli
oggetti persistenti
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
NSPersistentStoreCoordinator
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
NSPersistentStoreCoordinator
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Presenta al context gli object store sottostanti
come un’unico store
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
NSPersistentStoreCoordinator
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Presenta al context gli object store sottostanti
come un’unico store
Un context può creare un grafo di oggetti
distribuiti su più data store.
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Mappa gli oggetti persistenti nel file
associato
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Mappa gli oggetti persistenti nel file
associato
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
Sqlite
Data Store
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Mappa gli oggetti persistenti nel file
associato
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
Sqlite
Data Store
Sqlite
Data Store
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Mappa gli oggetti persistenti nel file
associato
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
Sqlite
Data Store
Sqlite
Data Store
XML
Data Store
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Mappa gli oggetti persistenti nel file
associato
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
Sqlite
Data Store
Sqlite
Data Store
XML
Data Store
Bin
Document
NSPeristentDocument
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
Sqlite
Data Store
Sqlite
Data Store
XML
Data Store
Bin
Document
NSPeristentDocument
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
È possibile configurare il persistent stack da
codice.
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
Sqlite
Data Store
Sqlite
Data Store
XML
Data Store
Bin
Document
NSPeristentDocument
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
È possibile configurare il persistent stack da
codice.
Per applicazioni document-based
NSPeristentDocument
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
Sqlite
Data Store
Sqlite
Data Store
XML
Data Store
Bin
Document
NSPeristentDocument
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
È possibile configurare il persistent stack da
codice.
Per applicazioni document-based
NSPeristentDocument
mapping one-to-one document-data store
ContextUser
TimeLine
homeTimeline
timeLine
Statusn
loadedStatus
Status 1
Coordinator
Data Store
Sqlite
Data Store
Sqlite
Data Store
XML
Data Store
Bin
Domanda
Domanda
Ok, ma come indico a CoreData quali sono gli oggetti da rendere
persistenti?
Domanda
Ok, ma come indico a CoreData quali sono gli oggetti da rendere
persistenti?
NSManagedObjectModel
Domanda
Ok, ma come indico a CoreData quali sono gli oggetti da rendere
persistenti?
NSManagedObjectModel
Rappresenta il modello degli oggetti persistenti
Opzione 1: Editor Grafico
Opzione 1: Editor Grafico
No,
Than
ks
Opzione 2: Da codice
Opzione 2: Da codice
Ok!
Opzione 2: Da codice
Ok!
[esempio PersistenceStack]
Conclusioni: Principi
Conclusioni: Principi
È fondamentale curare il design:
Conclusioni: Principi
È fondamentale curare il design:•No alle duplicazioni
Conclusioni: Principi
È fondamentale curare il design:•No alle duplicazioni•Alta coesione e basso accoppiamento
degli oggetti
Conclusioni: Principi
È fondamentale curare il design:•No alle duplicazioni•Alta coesione e basso accoppiamento
degli oggetti
La flessibilità di Objective-c aiuta
Conclusioni: In pratica
Conclusioni: In pratica
Nello specifico dell’iPhone SDK:
Conclusioni: In pratica
Nello specifico dell’iPhone SDK:
Costruzione delle relazioni del MVC nel codice
Conclusioni: In pratica
Nello specifico dell’iPhone SDK:
Costruzione delle relazioni del MVC nel codice
Costruzione del persistence stack nel codice
Domande?
Presentazione
Presentazione