Applicazione iPhone con utilizzo di CoreData e UIKit

Post on 29-Jan-2018

2.273 views 0 download

Transcript of Applicazione iPhone con utilizzo di CoreData e UIKit

Applicazione iPhone con utilizzo di UIKit e CoreData

Giannandrea CastaldiSoftware Engineer in Exmachina.chgiannandrea.castaldi@exmachina.chhttp://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

Presentazione

http://www.snoopal.com