{"id":325,"date":"2009-10-20T08:00:01","date_gmt":"2009-10-20T06:00:01","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=325"},"modified":"2010-07-21T22:57:21","modified_gmt":"2010-07-21T20:57:21","slug":"t002-calcolo-di-una-somma","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t002-calcolo-di-una-somma\/","title":{"rendered":"T#002 &#8211; Calcolo di una somma"},"content":{"rendered":"<p>Ed eccoci al nostro secondo tutorial. Dopo la prima infarinatura dei giorni scorsi su alcuni concetti teorici e dopo la presentazione dei principali strumenti disponibili per programmare il vostro iPhone vi presentiamo un esempio pratico. Quello che andiamo a costruire oggi \u00e8 un piccolo programma per il calcolo della somma di due addendi, che avr\u00e0 l&#8217;aspetto mostrato in Figura 1.<!--more--><\/p>\n<p><center><\/p>\n<div style=\"width: 330px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/10\/T002.jpg\" alt=\"Tutorial_002\" width=\"320\" height=\"480\" \/><\/p>\n<p class=\"wp-caption-text\">Figura 1 &#8211; Aspetto finale del programma T#002<\/p>\n<\/div>\n<p><\/center><\/p>\n<p>Come potete vedere dall&#8217;immagine ci sono diversi elementi con cui faremo la nostra conoscenza. Il funzionamento del programmino \u00e8 semplice e intuitivo. Baster\u00e0 infatti inserire i valori di X e Y negli appositi campi e premendo il tasto &#8220;calcola somma&#8221; verr\u00e0 eseguito il calcolo e mostrato come risultato nella label a sfondo nero che vedere nell&#8217;immagine. Poche istruzioni quindi, ma anche qualche piccola accortezza che dar\u00e0 un tocco pi\u00f9 completo anche ad un programma di cos\u00ec piccole dimensioni.<\/p>\n<p>Apriamo Xcode e selezioniamo &#8220;<em>Create a new Xcode project<\/em>&#8220;. Nella schermata che si apre tra i Template iPhone OS,  selezioniamo &#8220;<em>view-based Application<\/em>&#8221; (Figura 2) e andiamo avanti.<\/p>\n<p><center><\/p>\n<div style=\"width: 310px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/10\/newProject.jpg\" alt=\"Scelta Template nuovo progetto\" width=\"300\" height=\"244\" \/><\/p>\n<p class=\"wp-caption-text\">Figura 2 &#8211; Scelta template nuovo progetto<\/p>\n<\/div>\n<p><\/center><\/p>\n<p>Diamo il nome &#8220;<em>Somma<\/em>&#8221; al nostro nuovo progetto. Salviamo quindi nella posizione desiderata e iniziamo a dare un&#8217;occhiata a come si presenta il nostro nuovo progetto.<\/p>\n<p><center><\/p>\n<div style=\"width: 610px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/10\/somma_Xcode.jpg\" alt=\"Finestra nuovo progetto Xcode\" width=\"600\" height=\"379\" \/><\/p>\n<p class=\"wp-caption-text\">Figura 3 &#8211; Finestra nuovo progetto Xcode<\/p>\n<\/div>\n<p><\/center><\/p>\n<p>Come potete vedere dalla Figura 3 in <em>Groups &amp; Files<\/em> sulla sinistra, sono presenti molte cartelle e files del progetto pronti per essere modificati. Ci\u00f2 che interessa a noi in questo tutorial sono 2 file nella cartella <em>Classes<\/em>: <em>SommaViewController.h<\/em> e <em>SommaViewController.m<\/em> che contengono il codice sorgente dei controlli nella nostra applicazione pi\u00f9 il metodo che si occuper\u00e0 di effettuare la somma e un file nella cartella <em>Resources<\/em>, ovvero <em>SommaViewController.xib<\/em> inerente l&#8217;interfaccia grafica creata tramite Interface Builder.<\/p>\n<h4>Creiamo l&#8217;interfaccia grafica<\/h4>\n<p>Facciamo doppio click sul file <em>SommaViewController.xib<\/em> descritto poco fa, si aprir\u00e0 quindi Interface Builder che useremo per disegnare, tramite Drag &amp; Drop, l&#8217;interfaccia mostrata in Figura 1. Lasciamo perdere per ora gli abbellimenti grafici visibili in Figura 1, come il titolo o lo sfondo e &#8220;disegnamo&#8221; solo i controlli principali.<\/p>\n<p>Fate doppio click sull&#8217;icona della View mostrata in Figura 4 e si aprir\u00e0 la vostra view vuota.<\/p>\n<p><center><\/p>\n<div style=\"width: 260px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/10\/finestra_elementi_IB.jpg\" alt=\"Elementi_Programma_in_IB\" width=\"250\" height=\"252\" \/><\/p>\n<p class=\"wp-caption-text\">Figura 4 &#8211; Aprire la view<\/p>\n<\/div>\n<p><\/center><\/p>\n<p>Ora, tramite la finestra <em>Library<\/em> di Interface Builder, contenente tutti gli oggetti preconfezionati, cercate e trascinate nella view i seguenti elementi (utilizzate, se volete, il campo testo &#8220;<em>Filter<\/em>&#8221; utile per la ricerca degli elementi al fondo di <em>Library<\/em> ):<\/p>\n<ul>\n<li>N. 2 UITextField<\/li>\n<li>N. 1 UIButton<\/li>\n<li>N. 1 UILabel<\/li>\n<\/ul>\n<p>Questi sono i controlli essenziali per il corretto funzionamento dell&#8217;applicazione di questo tutorial. Nessuno vi vieta, per impratichirvi un po&#8217; con Interface Builder, di inserire anche gli altri elementi che vedete in Figura uno, per la maggior parte semplici UILabel con settata la sola propriet\u00e0 <em>Text<\/em>, mentre per il titolo in alto ho usato una UINavigationBar (che vedremo pi\u00f9 avanti a cosa serve) con settato il solo attributo <em>Title<\/em>, comodo per abbellire un po&#8217; la nostra applicazione fornendola appunto di un titolo.<\/p>\n<p>Inseriti gli oggetti nella view, posizionatoli, trascinandoli, in modo che l&#8217;aspetto sia il pi\u00f9 vicino possibile a quello della Figura 1, o come meglio preferite, e selezionandoli uno ad uno iniziate a dare un&#8217;occhiata alla finestra degli Attributi (<em>Attributes<\/em>), mostrata in Figura 5. Da qui potrete modificare in modo semplice e intuitivo le propriet\u00e0 di ogni oggetto inserito nella vostra applicazione.<\/p>\n<p><center><\/p>\n<div style=\"width: 297px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/10\/attributi_IB.jpg\" alt=\"Window_Attributes\" width=\"287\" height=\"578\" \/><\/p>\n<p class=\"wp-caption-text\">Figura 5 &#8211; Finestra degli attributi<\/p>\n<\/div>\n<p><\/center><\/p>\n<p>Modificate per quanto riguarda le UITextField inserite gli attributi &#8220;<em>Correction<\/em>&#8221; impostandolo a &#8220;No&#8221;, l&#8217;attributo &#8220;<em>Keyboard<\/em>&#8221; in &#8220;<em>Numbers &amp; Punctuaction<\/em>&#8221; (che aprir\u00e0 in automatico la tastiera corretta per questa applicazione) e lasciate la spunta su &#8220;Clear When Editing Begins&#8221; che non far\u00e0 altro che cancellare il contenuto esistente nelle UITextField quando vorrette immettere un numero in fase di esecuzione. Vi consiglio, a tutorial terminato, di sperimentare con le altre propriet\u00e0 e di osservare il comportamento in fase di esecuzione dell&#8217;applicazione.<\/p>\n<p>Per quanto riguarda l&#8217;oggetto UIButton, sempre tramite la finetra <em>Attributes<\/em> o semplicemente con un doppio-click sul controllo, modificate l&#8217;attributo <em>Title<\/em> inserendo &#8220;CALCOLA SOMMA&#8221;.<\/p>\n<p>Salvate quindi e chiudete momentaneamente Interface Builder.<\/p>\n<h4>Dichiariamo i nostri oggetti in Xcode<\/h4>\n<p>Torniamo su Xcode e clicchiamo <em>SommaViewController.h<\/em> dentro Classes tramite Groups &amp; Files. Dentro questo file andremo a dichiarare gli oggetti ed i metodi che user\u00e0 l&#8217;applicazione.<\/p>\n<p>Di seguito il codice che dovrete scrivere al suo interno. Potete copiare e incollare, ma per esercitarvi con l&#8217;editor consiglio di riscrivere il codice. Questo vi aiuter\u00e0 inoltre ad imparare per bene la sintassi di objective-c<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n\r\n#import <UIKit\/UIKit.h>\r\n\r\n@interface SommaViewController : UIViewController {\r\n\tIBOutlet UITextField *txtPrimoAddendo;\r\n\tIBOutlet UITextField *txtSecondoAddendo;\r\n\tIBOutlet UILabel *lblTotale;\r\n\r\n}\r\n\r\n-(IBAction)somma;\r\n\r\n@property (nonatomic, retain) IBOutlet UITextField *txtPrimoAddendo;\r\n@property (nonatomic, retain) IBOutlet UITextField *txtSecondoAddendo;\r\n@property (nonatomic, retain) IBOutlet UILabel *lblTotale;\r\n\r\n@end\r\n<\/pre>\n<p>Analizziamo insieme il codice. <em>IBOutlet<\/em> indica che l&#8217;oggetto \u00e8 associato ad un elemento creato con Interface Builder, infatti troviamo la dichiarazione dei due UITextField e della UILabel che useremo per il risultato.<\/p>\n<p><em>-(IBAction)somma;<\/em> \u00e8 la dichiarazione del metodo che si occuper\u00e0 di effettuare il calcolo e come avrete intuito tramite l&#8217;istruzione <em>IBAction<\/em>, anch&#8217;esso sar\u00e0 collegato ad un oggetto creato in IB (Interface Builder), precisamente all&#8217;UIButton.<\/p>\n<p>Le tre <em>@property<\/em> successive ci serviranno infine per poter usare tutte le propriet\u00e0 degli oggetti che abbiamo appena dichiarato.<\/p>\n<p>Salvate il file e torniamo in Interface Builder per effettuare gli opportuni collegamenti.<\/p>\n<p>Fate quindi doppio-click sul file <em>SommaViewController.xib<\/em> dentro <em>Resources<\/em>.<\/p>\n<h4>Colleghiamo gli oggetti di IB con quelli di Xcode<\/h4>\n<p>Nella finestra mostrata in Figura 4 clicchiamo su <em>File&#8217;s Owner<\/em> e apriamo quindi la finestra Connection. Tra gli <em>Outlets t<\/em>roveremo l&#8217;elenco degli elementi dichiarati in Xcode, portiamo il puntatore del mouse sul pallino che diventer\u00e0 un +, clicchiamo e tenendo premuto apparir\u00e0 una freccia che dovremmo portare sull&#8217;oggetto equivalente nella View. Dopodich\u00e8 rilasciamo il puntatore e si creer\u00e0 la connessione. Dovremo effettuare le seguenti connessioni:<\/p>\n<ul>\n<li><em>txtPrimoAddendo<\/em> con il primo UITextField della View<\/li>\n<li><em>txtSecondoAddendo<\/em> con il secondo UITextField della View<\/li>\n<li><em>lblTotale<\/em> con la UILabel che mostrer\u00e0 il risultato<\/li>\n<\/ul>\n<p>Rimane ora solo da effettuare il collegamento dell&#8217;unica <em>Received Action<\/em>, ovvero <em>Somma<\/em> con il nostro UIButton. Facendo ci\u00f2 comparir\u00e0 un men\u00f9 contestuale dove andremo a selezionare &#8220;<em>Touch Up Inside<\/em>&#8221; che indica semplicemente che il calcolo dovr\u00e0 essere svolto alla pressione del tasto.<\/p>\n<p>In Figura 6 mostriamo come dovrebbe apparire la finestra Connection al termine di questa fase del tutorial:<\/p>\n<p><center><\/p>\n<div style=\"width: 297px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/10\/connection_T002.jpg\" alt=\"Connections_T002\" width=\"287\" height=\"245\" \/><\/p>\n<p class=\"wp-caption-text\">Figura 6 &#8211; Connessioni tra oggetti IB e Xcode<\/p>\n<\/div>\n<p><\/center><\/p>\n<p>Salvate e chiudete Interface Builder. Non ci resta quindi che scrivere il codice vero e proprio che far\u00e0 funzionare la nostra applicazione.<\/p>\n<h4>Scriviamo un po&#8217; di codice<\/h4>\n<p>Apriamo ora il file <em>SommaV<\/em><em>iewController.m<\/em> dentro Classes in Groups &amp; Files e inseriamo al suo interno il seguente codice senza modificare il resto gi\u00e0 presente:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n#import \"SommaViewController.h\"\r\n\r\n@implementation SommaViewController\r\n\r\n@synthesize txtPrimoAddendo, txtSecondoAddendo, lblTotale;\r\n\r\n-(IBAction)somma{\r\n\tint x = [[txtPrimoAddendo text] intValue];\r\n\tint y = [[txtSecondoAddendo text] intValue];\r\n\tint t = x + y;\r\n\r\n\tNSString *stringaRisultato = [NSString stringWithFormat:@\"%d\",t];\r\n\t[lblTotale setText:stringaRisultato];\r\n}\r\n\r\n- (void)dealloc {\r\n\t[txtPrimoAddendo dealloc];\r\n\t[txtSecondoAddendo dealloc];\r\n\t[lblTotale dealloc];\r\n    [super dealloc];\r\n}\r\n<\/pre>\n<p>Vediamo a grandi linee cosa significa quanto appena scritto. L&#8217;istruzione <em>@synthetize<\/em> non fa altro che caricare gli elementi dichiarati nel file <em>SommaViewController.h<\/em> importato con la prima istruzione. Segue quindi il nostro metodo, il cuore di questo programmino. Per prima cosa dichiariamo tre variabili il cui tipo di valore sar\u00e0 un intero (<em>int<\/em>) e le inizializziamo assegnando alle prima due (X e Y) il contenuto dell&#8217;attributo <em>Text<\/em> dei due UITextField, ovviamente il contenuto deve essere trattato come valore intero (grazie a\u00a0<em>intValue<\/em>) e non come se fosse una stringa, il tutto tramite le istruzioni <em>int x = [[txtPrimoAddendo text] intValue];<\/em> e la successiva <em>int y = [[txtSecondoAddendo text] intValue];<\/em><\/p>\n<p>La terza inizializzazione, invece, setta nella variabile <em>t<\/em>, sempre di tipo <em>int<\/em>, la somma delle due precedenti (X e Y), calcola quindi la somma dei due valori inseriti dall&#8217;utente.<\/p>\n<p>Le ultime due istruzioni servono invece a settare in una stringa (<em>stringaRisultato<\/em>) la somma ottenuta, poi da visualizzare grazie all&#8217;ultima istruzione del metodo sulla UILabel della view connessa con lblTotale.<\/p>\n<p>L&#8217;ultima porzione di codice non serve a nient&#8217;altro che a <em>deallocare<\/em> la memoria utilizzata dalle variabili del programma. Questo per aumentare l&#8217;efficienza delle vostre applicazioni che girano su un Hardware se possiamo dire &#8220;limitato&#8221;.<\/p>\n<p>A questo punto l&#8217;applicazione \u00e8 quasi terminata. L&#8217;unica cosa che manca da fare \u00e8 dire al programma di chiudere la tastiera una volta inseriti i nostri dati, in modo da nasconderla e poter visualizzare il nostro risultato. Vediamo come fare.<\/p>\n<h4>Nascondiamo la tastiera<\/h4>\n<p>Apriamo il nostro file SommaViewController.m e aggiungiamo sotto il nostro metodo creato in precedenza quest&#8217;altro metodo:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n\/\/ Metodo per far chiudere la tastiera\r\n-(BOOL)textFieldShouldReturn:(UITextField *)textField{\r\n\t[textField resignFirstResponder];\r\n\treturn YES;\r\n}\r\n<\/pre>\n<p>Non preoccupatevi ora di come funziona, in quanto ancora complesso da capire. Tenete presente che ogni volta che ne avrete bisogno sar\u00e0 sempre questo il metodo da inserire.<\/p>\n<p>Colleghiamolo quindi il metodo ai nostri UITextField tramite Interface Builder. Apriamo IB facendo come al solito doppio-click sul file <em>SommaViewController.xib<\/em>, selezioniamo il primo UITextField e apriamo la finestra Connections, colleghiamo l&#8217;unico Outlets presente con il nostro File&#8217;s Owner. Ripetiamo il procedimento con il secondo UITextField, salviamo e chiudiamo infine Interface Builder.<\/p>\n<p>A questo punto la nostra applicazione \u00e8 terminata non ci resta che avviarla e testarne il suo funzionamento.<\/p>\n<h4>Avviare l&#8217;applicazione<\/h4>\n<p>Impostate l&#8217;SDK attivo come spiegato e avviate ed eseguite l&#8217;applicazione, come spiegato nel nostro <a href=\"http:\/\/www.devapp.it\/wordpress\/t001-hello-world.html\" target=\"blank\">primo tutorial<\/a>, sull&#8217;iPhone Simulatore o in alternativa sul vostro iPhone.<\/p>\n<p><center><\/p>\n<h4>Video Tutorial<\/h4>\n<p> by David Pollak<br \/>\n<\/center><\/p>\n<p><center><br \/>\n<strong>Parte 1<\/strong><br \/>\n<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/cP8HFEvCF2I&#038;hl=it_IT&#038;fs=1&#038;\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/cP8HFEvCF2I&#038;hl=it_IT&#038;fs=1&#038;\" type=\"application\/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"><\/embed><\/object><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<strong>Parte 2<\/strong><br \/>\n<object width=\"425\" height=\"344\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/8xff5MpxSb4&amp;hl=it_IT&amp;fs=1\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/8xff5MpxSb4&amp;hl=it_IT&amp;fs=1\" type=\"application\/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"425\" height=\"344\"><\/embed><\/object><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ed eccoci al nostro secondo tutorial. Dopo la prima infarinatura dei giorni scorsi su alcuni concetti teorici&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[5,4,14,1,23],"class_list":["post-325","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-objective-c","tag-programmazione","tag-sdk","tag-tutorial-pratici","tag-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=325"}],"version-history":[{"count":34,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/325\/revisions"}],"predecessor-version":[{"id":4075,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/325\/revisions\/4075"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=325"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=325"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}