Sviluppare apps native per iOS - Lo Stretto Digitale

Post on 05-Jul-2015

175 views 0 download

description

Lo Stretto Digitale - Workshops 2014

Transcript of Sviluppare apps native per iOS - Lo Stretto Digitale

Sviluppare app native per Sviluppare app native per iOSiOS

Gaspar e Novar aGaspar e Novar a

MESSINA MESSINA - 12- 12/07/2014/07/2014

PrerequisitiPrerequisiti

Che serve per iniziare?Che serve per iniziare?

Sistema Operativo: Sistema Operativo: OS X MavericksOS X Mavericks

Software: Xcode 5.1.1 (con iOS SDK 7 incluso)Software: Xcode 5.1.1 (con iOS SDK 7 incluso)

Know-how: Objective C (base)Know-how: Objective C (base)

Un database SQlite chiamato contatti.sqlite con questa Un database SQlite chiamato contatti.sqlite con questa tabella: CREATE TABLE contact (nome TEXT, cognome TEXT, tabella: CREATE TABLE contact (nome TEXT, cognome TEXT, cellulare TEXT) cellulare TEXT)

IDE di sviluppo Xcode 5.1.1IDE di sviluppo Xcode 5.1.1

P r i m i p a s s i i n X c o d eP r i m i p a s s i i n X c o d e

P r i m i p a s s i i n X c o d eP r i m i p a s s i i n X c o d eI TemplateI Template

Master-Detail Application: Master-Detail Application: genera un’applicazione composta da una genera un’applicazione composta da una tabella, una barra di navigazione e una vista di dettaglio. tabella, una barra di navigazione e una vista di dettaglio.

Page-Based ApplicationPage-Based Application, fornisce una struttura “a pagine”, come una , fornisce una struttura “a pagine”, come una sorta di libro, sfogliabile scorrendo il dito da destra verso sinistra.sorta di libro, sfogliabile scorrendo il dito da destra verso sinistra.

Single View ApplicationSingle View Application, fornisce un’applicazione vuota, senza , fornisce un’applicazione vuota, senza nessuna implemen- tazione particolare.nessuna implemen- tazione particolare.

Tabbed ApplicationTabbed Application, fornisce un’applicazione con la “tab bar”, ovvero , fornisce un’applicazione con la “tab bar”, ovvero la barra nera composta da più sezioni (ad esempio quella che la barra nera composta da più sezioni (ad esempio quella che trovate nell’applicazione nativa “Musica”).trovate nell’applicazione nativa “Musica”).

Empty ApplicationEmpty Application, fornisce solo un delegato per la nostra , fornisce solo un delegato per la nostra applicazione, senza nessun elemento grafico. È destinato agli utenti applicazione, senza nessun elemento grafico. È destinato agli utenti più esperti, che vogliono creare la loro struttura personalizzata.più esperti, che vogliono creare la loro struttura personalizzata.

A p p T e m p l at eA p p T e m p l at e

Che App Svilupperemo?Che App Svilupperemo?

Struttura App di baseStruttura App di baseModel: Contact di tipo NSObjectModel: Contact di tipo NSObject

DAO: classDatabase di tipo NSObjectDAO: classDatabase di tipo NSObject

Controller:Controller:* ListaViewController di tipo UiViewController* ListaViewController di tipo UiViewController* DetailViewController di tipo UiViewController* DetailViewController di tipo UiViewController* AddViewController di tipo UiViewController* AddViewController di tipo UiViewController

Framework di supporto: libsqlite3.0.dylibFramework di supporto: libsqlite3.0.dylib

AppDelegate.hAppDelegate.h

NOTA: In Objective C tutti gli oggetti sono riferiti tramite puntatori.

Parentesi: PropertyParentesi: PropertyLe property sono metodi accessori, permettono di definire metodi per accedere indirettamente alle variabili di istanza che essendo private non possono essere viste dall’esterno della classe in cui sono implementate. Questo meccanismo permette di rispettare l’incapsulamento della programmazione orientata agli oggetti.

Per il metodo getter si usa getNomeIstanza;Per il metodo setter si usa setNomeIstanza;

Attributi

Scrittura/lettura:readwrite: indica che è richiesto sia il metodo get che il metodo set dell'attributo.Readonly: indica che è richiesto solo il metodo get del'attributo

Assegnazione:strong: l’oggetto che utilizza la property ne detiene la proprietà.weak: l’oggetto che utilizza la property non ne detiene la proprietà.copy: assegna una copia dell’oggetto alla property.assign: indica che il metodo set userà semplicemente un assegnamento. Si usa principalmente per attributi scalari

come per esempio int e floatretain: l’oggetto viene trattenuto in memoria al momento dell’assegnazione.

Atomicità:nonatomic: la property viene trattata in modo non atomico quando vengono utilizzate tecniche di

sincronizzazione.

AppDelegate.mAppDelegate.m

self.window.rootViewController =

Il Model Il Model Contact.h

Contact.m

Con il costrutto @synthesize andremo a creare, realmente, questi metodi seguendo le specifiche dichiarate nelle property.

La Classe DAOLa Classe DAOclassDatabase.h

La Classe DAOLa Classe DAO classDatabase.m

void = "a reference to some random chunk of memory with untyped/unknown contents" (es: definizione di metodi che non ritornano alcun valore)

id = "a reference to some random Objective-C object of unknown class" (es: init,sender,initWithNibName)

La Classe DAOLa Classe DAOclassDatabase.m

getContacts

* L’asterisco (*) viene chiamato operatore di indirezione o deferenziazione e restituisce il contenuto dell’oggetto puntato dal puntatore;

* L’operatore “e commerciale” (&) restituisce l’indirizzo della variabile

La Classe DAOLa Classe DAOdeleteContact

classDatabase.m

La Classe DAOLa Classe DAOinsertContact

classDatabase.m

ListaViewControllerListaViewController ListaViewControllerListaViewController.h.h

ListaViewControllerListaViewController ListaViewControllerListaViewController.m.m

ListaViewControllerListaViewControllerFunzionalità di cancellazione

ListaViewControllerListaViewController.m.m

ListaViewControllerListaViewController ListaViewControllerListaViewController.xib.xib

ListaViewController AppDelegate→ListaViewController AppDelegate→

#import "ListaViewController.h"

@property (strong, nonatomic) ListaViewController *viewController;

AppDelegate.h

AppDelegate.m

self.viewController = [[ListaViewController alloc] initWithNibName:@"ListaViewController" bundle:nil]; UINavigationController* navController = [[UINavigationController alloc] initWithRootViewController:self.viewController];self.window.rootViewController = navController;

AddViewController AddViewController AddViewController.h

AddViewController AddViewController AddViewController.m

AddViewController AddViewController AddViewController.m

ListaViewController AddViewController →ListaViewController AddViewController →

#import “ListaViewController.h”

DetailViewControllerDetailViewController DetailViewController.h

DetailViewControllerDetailViewController DetailViewController.m

DetailViewControllerDetailViewController DetailViewController.xib

ListaViewController DetailViewController→ListaViewController DetailViewController→

#import "DetailViewController.h"

Build & RunBuild & Run

Gaspare NovaraGaspare Novara

https://twitter.com/gaspare_novarahttps://twitter.com/gaspare_novara

https://www.linkedin.com/in/gasparenovarahttps://www.linkedin.com/in/gasparenovara

https://www.facebook.com/gaspare.novara

https://plus.google.com/101699312037605671054

GRAZIEGRAZIE!! https://twitter.com/StrettoDigitalehttps://twitter.com/StrettoDigitale - #glsd - #glsd