Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Xcode - Just do it

852 views

Published on

Apriamo Xcode e compiliamo...

  • Be the first to comment

Xcode - Just do it

  1. 1. Just do itApriamo Xcode e compiliamo... Stefano Zanetti § The Alchemist
  2. 2. Stefano Zanetti Apple iOS Developer Superpartes Innovation Campus & H-Farm Co-founder di # Pragma Mark ― www.pragmamark.org [tt] @stefanozanetti_ [in] Stefano Zanetti [fb] stefano.znt [email] zanetti.stefano@gmail.com iOS Bootcamp
  3. 3. Di cosa parliamo oggi?• MVC - Design Pattern Modal View Controller• Xcode: introduzione alle funzioni base• Sviluppiamo la nostra prima App: • main.m • AppDelegate • UIViewController • UINavigationController • UITableViewController iOS Bootcamp
  4. 4. MVCIl design pattern MVC assegna ad ogni oggetto un ruolo preciso: Model,View o Controller iOS Bootcamp
  5. 5. MVC Model DataIl design pattern MVC assegna ad ogni oggetto un ruolo preciso: Model,View o Controller iOS Bootcamp
  6. 6. MVC Model View Data DisplayIl design pattern MVC assegna ad ogni oggetto un ruolo preciso: Model,View o Controller iOS Bootcamp
  7. 7. MVC Coordinator Controller Model View Data DisplayIl design pattern MVC assegna ad ogni oggetto un ruolo preciso: Model,View o Controller iOS Bootcamp
  8. 8. MVC Coordinator Input utente Controller Model View Data DisplayIl design pattern MVC assegna ad ogni oggetto un ruolo preciso: Model,View o Controller iOS Bootcamp
  9. 9. MVC Coordinator Aggiorna Input utente Controller Model View Data DisplayIl design pattern MVC assegna ad ogni oggetto un ruolo preciso: Model,View o Controller iOS Bootcamp
  10. 10. MVC Coordinator Aggiorna Input utente Controller Model View Notifica Data DisplayIl design pattern MVC assegna ad ogni oggetto un ruolo preciso: Model,View o Controller iOS Bootcamp
  11. 11. MVC Coordinator Aggiorna Input utente Controller Model View Notifica Aggiorna Data DisplayIl design pattern MVC assegna ad ogni oggetto un ruolo preciso: Model,View o Controller iOS Bootcamp
  12. 12. ModelDescrive il/i modello/i dei dati utilizzato/i dalla nostraapplicazioneDefinisce la logica con cui vengono manipolati questidati. es: salvataggio, modifica, eliminazione... iOS Bootcamp
  13. 13. ViewE’ ciò che l’utente vede• Sa come disegnarsi• Risponde alle azioni dell’utente iOS Bootcamp
  14. 14. ControllerE’ l’intermediario tra una o più View e uno o più Model• Interpreta le azioni dell’utente eseguite nella View e comunica al Model eventuali cambiamenti da apportare• Segnala alla View le variazioni ai dati compiute dal Model• Gestisce il ciclo di vita degli altri oggetti iOS Bootcamp
  15. 15. Best practice1. Utilizziamo l’MVC per dividere il lavoro2. Impariamo a conoscere il Framework, non reinventiamolo.3. Non abusiamo delle View4. Minimiziamo le dipendenze mutuali5. Dividiamo il codice in moduli iOS Bootcamp
  16. 16. Xcode iOS Bootcamp
  17. 17. XcodeEditor/Builder iOS Bootcamp
  18. 18. Xcode Editor/BuilderNavigator iOS Bootcamp
  19. 19. Xcode Inspector Editor/BuilderNavigator iOS Bootcamp
  20. 20. Xcode Inspector Editor/BuilderNavigator Library iOS Bootcamp
  21. 21. Xcode Inspector Editor/BuilderNavigator Library Console iOS Bootcamp
  22. 22. Xcode Jump Bar Inspector Editor/BuilderNavigator Library Console iOS Bootcamp
  23. 23. Navigator• Project Navigator (cmd + 1)• Symbol Navigator (cmd + 2)• Search Navigator (cmd + 3)• Issue Navigator (cmd + 4)• Debug Navigator (cmd + 5)• Breakpoints Navigator (cmd + 6)• Log Navigator (cmd + 7) iOS Bootcamp
  24. 24. Inspector• File Inspector (alt + cmd + 1)• Quick Help Inspector (alt + cmd + 2)• Identity Inspector (alt + cmd + 3)• Attributes Inspector (alt + cmd + 4)• Size Inspector (alt + cmd + 5)• Connections Inspector (alt + cmd + 6) iOS Bootcamp
  25. 25. Library• File Template Library (ctrl + alt + cmd + 1)• Code Snipped Library (ctrl + alt + cmd + 2)• Object Library (ctrl + alt + cmd + 3)• Media Library (ctrl + alt + cmd + 4) iOS Bootcamp
  26. 26. Jump Bar• Mostra il percorso relativo del file corrente• Ci permette di navigare velocemente tra i file che si trovano allo stesso livello iOS Bootcamp
  27. 27. IBOutlet@property (nonatomic, retain) IBOutlet UILabel *label;• Rappresenta una variabile d’istanza che referenzia un altro oggetto• Questa referenza è configurata ed archiviata attraverso l’Interface Builder• Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra l’oggetto utilizzato nello xib e la variabile d’istanza ad esso collegata iOS Bootcamp
  28. 28. Connettiamoctrl + click sul controllo + drag iOS Bootcamp
  29. 29. IBActions- (IBAction)doSomething:(id)sender;• Utilizzato al posto di void• Dichiara che il metodo è una “Action”. In questo modo IB, come per gli IBOutlet, è consapevole della sua presenza e può collegarlo ad un evento• Il parametro sender è controllo che manda il messaggio iOS Bootcamp
  30. 30. Connettiamoctrl + click sul controllo + drag iOS Bootcamp
  31. 31. La prima App... dalla teoria alla pratica Stefano Zanetti § The Alchemist
  32. 32. Il punto di ingresso: main.m#import <UIKit/UIKit.h>#import "AppDelegate.h"int main(int argc, char *argv[]){ @autoreleasepool { return UIApplicationMain(argc, argv, nil,NSStringFromClass([AppDelegate class])); }} iOS Bootcamp
  33. 33. AppDelegate Start & End- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions{// Il sistema notifica alla nostra applicazione che la fase dicaricamento è terminata}- (void)applicationWillTerminate:(UIApplication *)application{! Il sistema notifica alla nostra applicazione che lutente o//il sistema stesso ha richiesto la chiusura della nostraapplicazione. Possiamo usare questo metodo per salvare lostatus della nostra applicazione.} iOS Bootcamp
  34. 34. Enter in Background- (void)applicationWillResignActive:(UIApplication*)application{// Il sistema notifica alla nostra applicazione che sta perdiventare inattiva. Disabilitare Timer, mettere in pausa iTask, ...}- (void)applicationDidEnterBackground:(UIApplication*)application{// Se la nostra applicazione supporta il background, questometodo viene chiamato al posto del applicationWillTerminate.Utilizzate questo metodo per rilasciare le risorse, salvare idati, invalidare i timers...} iOS Bootcamp
  35. 35. Enter in Foreground- (void)applicationWillEnterForeground:(UIApplication*)application{! Il sistema notifica che l’applicazione sta passando dallo//stato di background a quello di inattiva. In questo metodo èpossibile ripristinare la maggior parte delle cambiamentieffettuati prima di entrare in background.}- (void)applicationDidBecomeActive:(UIApplication *)application{! Il sistema notifica che l’applicazione è tornata attiva.//Utilizzare questo metodo per far ripartire i vari task attivi,timers, eventualmente per effettuare un refreshdell’interfaccia utente...} iOS Bootcamp
  36. 36. UIViewController• Un UIViewController è controller generico utile per manipolare le UIView.• Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare. iOS Bootcamp
  37. 37. Di cosa abbiamo bisogno?• - (id)initWithNibName:(NSString *)nibNameOrNil bundle: (NSBundle *)nibBundleOrNil;• - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated;• - (void)dismissModalViewControllerAnimated:(BOOL)animated; iOS Bootcamp
  38. 38. Creare un ViewControllerPMViewController *controller = [[[PMViewController alloc]initWithNibName:@"PMViewController" bundle:nil] autorelease]; iOS Bootcamp
  39. 39. Creare un ViewControllerPMViewController *controller = [[[PMViewController alloc]initWithNibName:@"PMViewController" bundle:nil] autorelease]; Nome del file xib iOS Bootcamp
  40. 40. Creare un ViewControllerPMViewController *controller = [[[PMViewController alloc]initWithNibName:@"PMViewController" bundle:nil] autorelease]; Bundle in cui Nome del file xib cercare il file xib iOS Bootcamp
  41. 41. Quale transizione utilizzare?// UIModalTransitionStyle://// UIModalTransitionStyleCoverVertical,// UIModalTransitionStyleFlipHorizontal,// UIModalTransitionStyleCrossDissolve,// UIModalTransitionStylePartialCurl,[controllersetModalTransitionStyle:UIModalTransitionStyleCoverVertical]; iOS Bootcamp
  42. 42. Utilizziamo il ViewControllerPresentiamo in modale il ViewController[self presentModalViewController:controller animated:YES];Rimuoviamo il ViewController[self dismissModalViewControllerAnimated:YES]; iOS Bootcamp
  43. 43. Appear/Disappear Gestione visualizzazione view• - (void)viewWillAppear:(BOOL)animated• - (void)viewDidAppear:(BOOL)animated• - (void)viewWillDisappear:(BOOL)animated• - (void)viewDidDisappear:(BOOL)animated• - (void)viewDidLoad• - (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation iOS Bootcamp
  44. 44. Memory Warning!- (void)viewDidLoad - (void)viewWillUnload - (void)didReceiveMemoryWarning iOS Bootcamp
  45. 45. UINavigationControllerEstende la classe UIViewController implementandola navigazione, semplice e veloce, tra ViewControllers iOS Bootcamp
  46. 46. Push & Pop Navigazione tra ViewControllers:• - (id)initWithRootViewController:(UIViewController *)rootViewController;• - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;• - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;• - (NSArray *)popToRootViewControllerAnimated: (BOOL)animated; iOS Bootcamp
  47. 47. RootViewController Inizializzazione UINavigationControllerUIViewController *viewController = [[UIViewController alloc]initWithNibName:@"ViewController" bundle:nil];UINavigationController *navigationController =[[UINavigationController alloc]initWithRootViewController:viewController];[viewController release]; iOS Bootcamp
  48. 48. PushCreiamo e aggiungiamo un nuovo contenuto allo stackdei ViewControllers UIViewController *detailViewController = [[UIViewController alloc] initWithNibName:@"detailViewController" bundle:nil]; [self.navigationController pushViewController:detailViewController animated:YES]; [detailViewController release]; iOS Bootcamp
  49. 49. PopRimuoviamo il ViewController corrente dallo stack etorniamo a quello precedente[self.navigationController popViewControllerAnimated:YES];Rimuoviamo tutti i ViewControllers dallo stack etorniamo al rootViewController[self.navigationController popToRootViewControllerAnimated:YES]; iOS Bootcamp
  50. 50. UITableViewEcco qualche esempio di TableView: iOS Bootcamp
  51. 51. UITableViewCosa ci serve? • un UITableViewController Oppure: • un UIViewController • una UITableView • implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle) iOS Bootcamp
  52. 52. UITableViewDataSource• Obbligatori • - (NSInteger)tableView:(UITableView *) UITableView numberOfRowsInSection:(NSInteger)section; • - (UITableViewCell *)tableView:(UITableView *) UITableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;• Opzionali • - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; • - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section; • ... iOS Bootcamp
  53. 53. Data Model Definiamo il modello dati#import <UIKit/UIKit.h>@interface PMFATableViewController :UIViewController<UITableViewDataSource, UITableViewDelegate>{ UITableView *_tableView; NSArray *_elements;}@property (nonatomic, retain) IBOutlet UITableView *tableView;@property (nonatomic, retain) NSArray *elements;@end iOS Bootcamp
  54. 54. Popoliamo l’array di oggetti - (void)viewDidLoad {! [super viewDidLoad];! NSArray *elements = [NSArray arrayWithObjects:@"Objective-C", @"UIViewController", @"UITabBarController", @"UINavigationController", @"UITableView", nil];! self.elements = elements; } iOS Bootcamp
  55. 55. Configuriamo il DataSource- (NSInteger)tableView:(UITableView *)tableViewnumberOfRowsInSection:(NSInteger)section{ ! return [_elements count];} iOS Bootcamp
  56. 56. Configuriamo il DataSource- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease]; } cell.textLabel.text = [_elements objectAtIndex:indexPath.row]; return cell;} iOS Bootcamp
  57. 57. Cell Identifier Descriviamo le singole righe della slide precedente:CellIdentifier viene definito statico perchè questo metodo vienerichiamato moltissime volte. La parola chiave “static” permettedi non ricreare un oggetto se ne esiste già uno di quel tipo. static NSString *cellIdentifier = @"Cell"; iOS Bootcamp
  58. 58. Riutilizzare le celleIl DataSource riutilizza gli oggetti UITableViewCell. Tramitequesto metodo chiediamo alla UITableView se esiste una cellacon quel particolare identifier che possiamo riutilizzare UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; iOS Bootcamp
  59. 59. UITableViewNel caso non esista nessuna cella riutilizzabile ne creiamo unanuova if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease]; }Aggiorniamo il testo della cella con la riga del nostro arraycorrispondente alla riga dell’NSIndexPath interessato cell.textLabel.text = [_elements objectAtIndex:indexPath.row]; iOS Bootcamp
  60. 60. UITableViewDelegate• - (void)tableView:(UITableView *)tableView willDisplayCell: (UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;• - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;• - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;• - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;• - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;• ... iOS Bootcamp
  61. 61. What’s NeXT !? Using Storyboard iCl cat Push ou d ion int egrNo and atio n tifi calLo e hasMa Dat urc nag a pPCo em red ent Ap ata : Advanced UITableView In- and custom UITableViewCell iOS Bootcamp
  62. 62. Thanks ☺pragmamark.org iOS Bootcamp

×