<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Stefano e Lori Blog &#187; Xcode</title>
	<atom:link href="http://www.slweb.it/wp/tag/xcode/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.slweb.it/wp</link>
	<description>Famiglia, tecnologia, fotografia e musica... cioè la mia vita!</description>
	<lastBuildDate>Tue, 29 Jun 2010 05:53:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>(Studiando cocoa) Currency converter Parte 4°</title>
		<link>http://www.slweb.it/wp/02112009/studiando-cocoa-currency-converter-parte-4%c2%b0/</link>
		<comments>http://www.slweb.it/wp/02112009/studiando-cocoa-currency-converter-parte-4%c2%b0/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 16:41:28 +0000</pubDate>
		<dc:creator>stefano</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.slweb.it/wp/?p=636</guid>
		<description><![CDATA[Nelle precedenti parti abbiamo creato l&#8217;applicazione Currency Converter, in questa lezione cercheremo di completare ed apportare alcune migliorie.
Mostriamo bene il risultato del calcolo
Avrete sicuramente notato che il risultato della conversione è un numero float con tanti decimali per lo più ininfluenti. Voglio mostrare questa cifra con soli due decimali. Non sapendo come fare esattamente ho [...]]]></description>
			<content:encoded><![CDATA[<p>Nelle precedenti parti abbiamo creato l&#8217;applicazione Currency Converter, in questa lezione cercheremo di completare ed apportare alcune migliorie.</p>
<p><strong>Mostriamo bene il risultato del calcolo</strong></p>
<p>Avrete sicuramente notato che il risultato della conversione è un numero float con tanti decimali per lo più ininfluenti. Voglio mostrare questa cifra con soli due decimali. Non sapendo come fare esattamente ho dato una spulciata alle classi NSNumber e NSNumberFormatter ed ho trovato una soluzione che funziona, forse non sarà elegante ma funziona. In questo momento non cerco soluzioni eleganti ma semplicemente risposte alle mie curiosità.</p>
<p>Dunque ho modificato ConverterControlle.m  per utilizzare queste due classi così:<br />
<code><br />
- (IBAction)convert:(id)sender<br />
{<br />
//dichiaro una variabile per contenere un oggetto NSString<br />
//che conterrà il valore della conversione sottoforma di una<br />
//stringa opportunamente formattata.<br />
NSString *amount;<br />
//Creo un'istanza di converter<br />
converter = [[Converter alloc]init];<br />
//chiamo il metodo setSourceCurrencyAmount passandogli il valore del TextFiled<br />
//euroField<br />
[converter setSourceCurrencyAmount:[euroField floatValue]];<br />
//chiamo il metodo setRate passandogli il valore di rateField<br />
[converter setRate:[rateField floatValue]];<br />
//creo un oggetto NSNumberFormatter<br />
NSNumberFormatter *myNumberFormatter = [[NSNumberFormatter alloc] init];<br />
//setto i parametri per la formattazione<br />
[myNumberFormatter setMaximumFractionDigits:2];<br />
[myNumberFormatter setMinimumFractionDigits:2];<br />
//creo la stringa formattata, è necessario passare un NSNumber che creo a partire dal float che<br />
//mi torna convertCurrency<br />
amount = [myNumberFormatter stringFromNumber: [NSNumber numberWithFloat:[converter convertCurrency]]];<br />
//imposto il valore del campo amountField con il valore della variabile di metodo<br />
[amountField setStringValue:amount];<br />
//torno al campo di testo degli euro da convertire<br />
[euroField selectText:self];<br />
}</code></p>
<p>Come possiamo notare ho tolto la dichiarazione della variabile float e l&#8217;ho sostituita con una dichiarazione per una variabile adatta a contenere un oggetto NSString. Ho poi creato ed istanziato un oggetto NSNumberFormatter che si occupera della formattazione e della conversione in una stringa.</p>
<p><code>NSNumberFormatter *myNumberFormatter = [[NSNumberFormatter alloc] init];</code></p>
<p>Setto poi il comportamento di NSNumberFormatter con i decimali.</p>
<p><code>[myNumberFormatter setMaximumFractionDigits:2];<br />
[myNumberFormatter setMinimumFractionDigits:2];</code></p>
<p>Poi chiamo il metodo stringFrom Number che pretende come parametro un NSNumber e torna come risultato una NSString. Memorizzo l&#8217;oggetto NSString nella variabile amount e utilizzo il metodo di classe numberWithFloat per creare un oggetto NSNumber partendo da un numero float, che è quello tornato dal metodo convertCurrency.</p>
<p><code>mount = [myNumberFormatter stringFromNumber: [NSNumber numberWithFloat:[converter convertCurrency]]];</code></p>
<p>Infine assegno la variabile amount al campo di testo con il metodo setStringValue.</p>
<p><code>[amountField setStringValue:amount];</code></p>
<p>In questo modo l&#8217;importo convertito si vede sempre con 2 cifre decimali. NSNumberFormatter comunque fa molte altre cose è opportuno dargli uno sguardo, poichè contiene molti metodi per le valute e l&#8217;internazionalizzazione dei numeri.</p>
<p><strong>Ottimizziamo il menu</strong></p>
<p>Come avete notato il menu della nostra applicazione contiene molte più cose di quante ne servano effettivamente, questo perchè Xcode mette le cose più comuni dentro.</p>
<p>Togliete pure il menu relativo ai font, quello window tanto currency converter a una sola finestra, nel menu file togliete tutto e lasciate solo close, nel menu edit lasciate soltanto quelli relativi a la copia incolla, annulla e redo. Togliete pure l&#8217;istanza della classe che controlla il menu font nella finestra MainMenu.xib</p>
<p>Un&#8217;altra piccola cosa è quella di impostare l&#8217;allineamento a destra dei campi, a me piacciono i più i numeri allineati a destra stile calcolatrice.</p>
<p>Salviamo e chiudiamo IB</p>
<p><strong>Localizziamo in italiano</strong></p>
<p>Per localizzare in italiano la nostra applicazione occorre sostanzialmente tradurre soltanto l&#8217;interfaccia. Per far questo selezionate MainMenu.xib nella finestra di Xcode e premete Cmd + i nel tab general premete su Add localization e scrivete Italian come nome della localizzazione, premete add.</p>
<p>Ora fate doppio clic su MainMenu.xib (Italian) e in IB traducete tutto compreso il menu. Non tentate di tradurre il menu col nome dell&#8217;Applicazione non funzionerà quindi non traducetelo.</p>
<p>Salvate, date un clean e ricompilate la vostra applicazione. Adesso apparirà in italiano. Un consiglio guradate i nomi in italiano che usa Apple per tradurre i comandi comuni, come file-&gt;archivio, edit-&gt;modifica etc.</p>
<p>Bene salvate tutto e chiudete IB. In Xcode date un bel clean e ricompilate tutto. Ecco a voi Currency Converter in italiano.</p>
<p><strong>L&#8217;icona</strong></p>
<div id="attachment_639" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-639 " title="Icon Composer" src="http://www.slweb.it/wp/wp-content/uploads/2009/11/icona_cc.jpg" alt="Icon Composer" width="400" height="311" /><p class="wp-caption-text">Icon Composer</p></div>
<p>Per impostare l&#8217;icona dell&#8217;applicazione occorre prima disegnarne una e poi con il tool Icon Composer creare il file .icns. Potete disegnare la vostra icona con qualsiasi programma di grafica vettoriale come Illustrator o Fireworks, salvarla in formato jpeg o meglio png e importarla in Icon Composer. Icon Composer si trova dentro la cartella Developer &gt; Applications &gt; Utilities, non vi spiego come si fa è talmente banale che vi divertite da soli. Tenete presente che per Leopard occorre disegnare l&#8217;icona di ben 512&#215;512 pixel, poichè le icone grandi vengono mostrate nella visuale coverflow del finder.</p>
<p>Una volta che avete creato l&#8217;icona salvate il file con il nome APPL.icns all&#8217;interno della cartella del progetto. Per concludere in Xcode editate il file:</p>
<ul>
<li>Currency_Converter-info.plist</li>
</ul>
<p>che trovate nella cartellina Resources e nella proprietà icon file inserite APPL.icns. Clean e compilate di nuovo, adesso la vostra applicazione ha anche un&#8217;icona.</p>
<p>Bene e con questo si conclude il progetto Currency Converter, certo manca il file dell&#8217;aiuto, ho dato una sbirciata e ho capito che non è difficile ma piuttosto laborioso creare un help Book pertanto ci rinuncio per questo tutorial e ci dedicherò tempo per la mia prima vera e propria applicazione cocoa.</p>
<p>Ciao</p>
]]></content:encoded>
			<wfw:commentRss>http://www.slweb.it/wp/02112009/studiando-cocoa-currency-converter-parte-4%c2%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(Studiando cocoa) Currency converter Parte 3°</title>
		<link>http://www.slweb.it/wp/24102009/studiando-cocoa-currency-converter-parte-3%c2%b0/</link>
		<comments>http://www.slweb.it/wp/24102009/studiando-cocoa-currency-converter-parte-3%c2%b0/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 09:59:43 +0000</pubDate>
		<dc:creator>stefano</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.slweb.it/wp/?p=618</guid>
		<description><![CDATA[Bene ora che abbiamo creato sia l&#8217;oggetto &#8220;Model&#8221; che l&#8217;oggetto &#8220;View&#8221; non rimane che collegare il tutto per mezzo dell&#8217;oggetto &#8220;Controller&#8221; ma prima di cominciare vediamo cosa sono: Outlets, Targets e Actions.
Outlets
Un Outlet è una speciale variabile che identifica un&#8217;oggetto.
Come facilmente si capisce dalla immagine è un&#8217;oggetto particolare perché può fare riferimento a qualsiasi altro [...]]]></description>
			<content:encoded><![CDATA[<p>Bene ora che abbiamo creato sia l&#8217;oggetto &#8220;Model&#8221; che l&#8217;oggetto &#8220;View&#8221; non rimane che collegare il tutto per mezzo dell&#8217;oggetto &#8220;Controller&#8221; ma prima di cominciare vediamo cosa sono: Outlets, Targets e Actions.</p>
<p><strong>Outlets</strong></p>
<p>Un Outlet è una speciale variabile che identifica un&#8217;oggetto.</p>
<div id="attachment_619" class="wp-caption aligncenter" style="width: 281px"><a href="http://www.slweb.it/wp/wp-content/uploads/2009/10/outlet.gif"><img class="size-full wp-image-619" title="Outlet" src="http://www.slweb.it/wp/wp-content/uploads/2009/10/outlet.gif" alt="Outlet" width="271" height="85" /></a><p class="wp-caption-text">Outlet</p></div>
<p>Come facilmente si capisce dalla immagine è un&#8217;oggetto particolare perché può fare riferimento a qualsiasi altro oggetto dell&#8217;applicazione come  ad esempio un campo di testo, oppure un&#8217;istanza di una nostra classe. Gli Outlets posso essere configurati in IB e questo li rende ancora più speciali. Un outlet si dichiara così:</p>
<p><code>IBOutlet id nomeVariabile;</code></p>
<p>Gli oggetti che hanno id come tipo sono oggetti tipicizzati dinamicamente, durante il run-time verrà usato dinamicamente un tipo di dato idoneo. Benché questa funzionalità sia davvero potente e comoda perché ci permette di non preoccuparci dei tipi di dato durante lo sviluppo dell&#8217;applicazione, può essere però molto più difficile trovare e correggere alcuni bug. Quindi, quando non è strettamente necessario utilizzare un tipo dinamico e nella maggior parte dei casi non lo è, possiamo dichiarare gli Outlets come puntatori a classi di specifici oggetti. Ad esempio:</p>
<p><code>IBOutlet NSButton* myButton;</code></p>
<p>Gli Outlets vengono generalmente impostati in IB semplicemente disegnando una connessione fra due oggetti, esisto altri modi per impostare un Outlet ma questo è sicuramente il più conveniente.</p>
<p><strong>Target/Action in IB</strong></p>
<p>Le relazioni Target/Action vengono impostate nel pannello &#8220;Connections&#8221; nell&#8217;ispector di IB. Quando si chiede all&#8217;applicazione di eseguire una certa azione in pratica si manda un Action ad uno specifico Target che in IB è rappresentato da un Outlet di un certo oggetto. Alcuni oggetti, come ad esempio gli oggetti che ereditano da <em>NSControl </em>tipo<em> NSButton</em>, sono in grado di pilotare un metodo Action, in questi oggetti gli Outlets per Target e Action sono già definiti. Nei oggetti che invece creiamo noi come ad esempio un appController (quello che creeremo in questo articolo) possiamo definire le Action nel seguente modo:</p>
<p><code>- (IBAction)myAction:(id)sender;</code></p>
<p>Grazie a questa sintassi IB sarà capace di identificare le Action nei nostri oggetti e ci permetterà di collegarli agli altri oggetti dell&#8217;interfaccia.</p>
<p><strong>In quale direzione collegare</strong></p>
<p>Molto semplicemente possiamo definire due direzioni principali:</p>
<ul>
<li>Per creare una connessione Action dobbiamo disegnare un collegamento fra l&#8217;oggetto dell&#8217;interfaccia grafica che genera l&#8217;azione e il nostro appController che la riceve.</li>
<li>Per creare una connessione Outlet dobbiamo disegnare un collegamento fra un nostro oggetto e un&#8217;altro oggetto sia che appartenga ad una classe da noi creata sia che sia un elemento dell&#8217;interfaccia grafica.</li>
</ul>
<p>Ovviamente queste sono le connessioni più usate, ce ne sono dell&#8217;altre che a tempo debito verrano approfondite.</p>
<p><strong>Il controller ConverterController</strong></p>
<p>Bene è ora  di aggiungere il Controller alla nostra applicazione quindi similmente al Model aggiungiamo una classe al nostro progetto.</p>
<ul>
<li>In Xcode selezioniamo il gruppo Classes nella finestra del proggetto</li>
<li>Scegliamo File &gt;New File</li>
<li>Nella finestra di dialogo selezioniamo a sinistra Cocoa Class e a destra Objective-C Class scegliendo come Subclass of NSObject e clicchiamo su next.</li>
<li>Chiamiamo la nostra Classe ConverterController.m, assicuriamoci che sia selezionato also create ConverterController.h e clicchiamo su Finish.</li>
</ul>
<p>ConverterController si occuperà quindi di comunicare sia con l&#8217;interfaccia sia con la classe Converter che esegue il calcolo. Apriamo ConverterController.h per definire l&#8217;interfaccia del nostro Controller. Dichiariamo 3 Outlets per i tre campi di testo:</p>
<p><code>IBOutlet NSTextField *ammountField;<br />
IBOutlet NSTextField *euroField;<br />
IBOutlet NSTextField *rateField;</code></p>
<p>Si tratta di dichiarazioni di variabili quindi vanno all&#8217;interno delle parentesi graffe, come vedete abbiamo dichiarato gli Outlets in modo statico perché sappiamo benissimo che si tratta di NSTextField.</p>
<p>Dobbiamo poi dichiarare il metodo Convert per eseguire il calcolo.</p>
<p><code>- (IBAction)convert:(id)sender;</code></p>
<p>Certamente in questa piccola Applicazione avremo potuto eseguire i calcoli all&#8217;interno del Controller senza scomodare la classe Converter, tuttavia abbiamo deciso di eseguire l&#8217;applicazione secondo lo schema MVC. Lo schema MVC offre i suoi benefici in applicazioni molto complesse perché rende il codice più riusabile e più ordinato, in questa piccola applicazione sembra quasi complicare le cose inutilmente.</p>
<p>Salviamo il nostro ConverterController.h</p>
<p><strong>Colleghiamo ConverterController con l&#8217;interfaccia</strong></p>
<p>Siamo pronti per collegare l&#8217;interfaccia al nostro Controller, apriamo MainMenu.xib in IB</p>
<ul>
<li>Scegliamo menu File &gt; Read Class File e selezioniamo ConverterController.h</li>
<li>Dal pannello Library prendiamo un Object (Il cubo Blu) e trasciniamolo nella finestra delle istanze MainMenu.xib</li>
<li>Selezioniamo l&#8217;Object e andiamo nell&#8217;ispector sull&#8217;ultima iconcina quella dell&#8217;identity.</li>
<li>Nel menu a tendina Class selezioniamo ConverterController</li>
<li>Ora se andiamo sempre nell&#8217;ispector sulla penultima iconcina, quella delle connection vedremo i tre Outlets e l&#8217;Action che abbiamo definito precedentemente in ControllerConverter.h.</li>
</ul>
<p>Bene ora dobbiamo collegare gli Outlet di ConverterController con i relativi TextField nella finestra dell&#8217;applicazione.</p>
<ul>
<li>Selezioniamo l&#8217;oggetto ConvertContorller e tenendo premuto il tasto Ctrl  disegnamo una connessione  fino al primo TexField (Exchange Rate x 1€)</li>
<li>Nel piccolo BlackBox che compare con la lista degli Outlets disponibili selezioniamo rateField.</li>
<li>Ripetiamo l&#8217;operazione per gli altri due TextField selezionando gli opportuni Outlets</li>
</ul>
<p>Dobbiamo ora collegare il pulsante all&#8217;unica azione del nostro Controller</p>
<ul>
<li>Selezioniamo nella finestra il Pulsante Convert e  tenendo premuto il tasto Ctrl disegnamo una connessione verso l&#8217;oggetto ConverterController.</li>
<li>Nel BlackBox selezioniamo l&#8217;unica azione disponibile convert:</li>
</ul>
<p>Bene abbiamo creato tutte le connessioni necessaria fra il Controller e la View, salviamo MainMenu.xib. Per controllare se avete eseguito le connessioni correttamente basta che selezionate ConvertCotroller e nell&#8217;ispector delle connessioni cliccatte e poi passate il mouse sulle connessioni, i campi collegati si evidenzieranno.</p>
<p>Colleghiamo il Model al Controller</p>
<p>Per collegare il Model al Controller dobbiamo creare un&#8217;istanza di questo nel controller. Apriamo quindi di nuovo ConverterController.h e dichiariamo un puntatore alla classe Converter. Come abbiamo gia visto una variabile che deve contenere un&#8217;oggetto deve essere per forza un puntatore. Aggiungiamo quindi la seguente variabile tra le parentesi graffe:</p>
<p><code>Converter *converter;</code></p>
<p>Dobbiamo inoltre importare il file Converter.h per permettere a ConverterController di creare un&#8217;istanza di Converter. Aggiungiamo quindi la direttiva subito sotto l&#8217;ultima direttiva #import</p>
<p><code>#import "converter.h"</code></p>
<p>Salviamo ConverterController.h e apriamo ConverterController.m per implementare il metodo convert: utilizzando l&#8217;oggetto Converter.</p>
<p>Aggiungiamo la definizione del metodo convert: come di seguito:</p>
<p><code>- (IBAction)convert:(id)sender {<br />
//dichiaro una variabile float interna al metodo<br />
float amount;<br />
//Creo un'istanza di converter<br />
converter = [[Converter alloc]init];<br />
//chiamo il metodo setSourceCurrencyAmount passandogli il valore del TextFiled<br />
//euroField<br />
[converter setSourceCurrencyAmount:[euroField floatValue]];<br />
//chiamo il metodo setRate passandogli il valore di rateField<br />
[converter setRate:[rateField floatValue]];<br />
//utilizzo la variabile di metodo per ottenere la conversione chiamando il<br />
//metodo convertCurrency<br />
amount =   [converter convertCurrency];<br />
//imposto il valore del campo amountField con il valore della variabile di metodo<br />
[amountField setFloatValue:amount];<br />
//torno al primo campo di testo<br />
[rateField selectText:self];<br />
}</code></p>
<p>Bene la nostra applicazione è in uno stadio finale prima di compilare dobbiamo fare un&#8217;ultima cosa.</p>
<p><strong>Garbage Collection</strong></p>
<p>Come avrete notato ogni volta che chiamiamo il metodo convert: attraverso l&#8217;istruzione:</p>
<p><code>converter = [[Converter alloc]init];</code></p>
<p>creiamo un&#8217;istanza di converter riservando nella memoria del mac uno spazio idoneo a contenere l&#8217;istanza. Dovremo quindi preoccuparci cancellare questo spazio una volta che l&#8217;oggetto ha finito il suo compito, dobbiamo deallocare la memoria. Tuttavia se la vostra applicazione è sviluppata per Mac Os X 10.5 o superiore, possiamo utilizzare una comoda nuova funzionalita di Objective-C 2.0 cioè: Garbage Collection. Utilizzando Garbage Collection non dobbiamo preoccuparci di deallocare gli oggetti che abbiamo istanziato.</p>
<p>Tuttavia Garbage Collection attualmente non è abilitato di default, dobbiamo abilitarlo manualmente.</p>
<ul>
<li>In Xcode cliccate sul menu Project &gt; Edit Project Settings</li>
<li>Cliccate sul tab build</li>
<li>Nei settings andate nel gruppo GCC 4.2 &#8211; Code Generation ed impostate Objective-C Garbage Collection su <em>supported</em></li>
</ul>
<p>Sarebbe opportuno studiare meglio questa cosa!</p>
<p>Bene ora siete pronti per compilare e testare Currency Converter cliccando su Build &amp; Run.</p>
<p>Il prossimo appuntamento cercheremo di perfezionare l &#8216;applicazione e di tradurla in italiano.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.slweb.it/wp/24102009/studiando-cocoa-currency-converter-parte-3%c2%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(Studiando cocoa) Currency converter Parte 2°</title>
		<link>http://www.slweb.it/wp/23102009/studiando-cocoa-currency-converter-parte-2%c2%b0/</link>
		<comments>http://www.slweb.it/wp/23102009/studiando-cocoa-currency-converter-parte-2%c2%b0/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 21:46:52 +0000</pubDate>
		<dc:creator>stefano</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Coccoa]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.slweb.it/wp/?p=606</guid>
		<description><![CDATA[Nella prima parte abbiamo creato l&#8217;oggetto &#8220;Model&#8221; della applicazione Currency converter, i questa seconda parte creeremo l&#8217;oggetto &#8220;View&#8221; cioè l&#8217;interfaccia grafica dell&#8217;applicazione. Per creare l&#8217;interfaccia grafica il tool di sviluppo Xcode mette a disposizione un&#8217;applicazione chiamata Interface Builder. IB ci permette di creare in modo visuale un&#8217;interfaccia grafica funzionante attraverso una libreria di oggetti grafici [...]]]></description>
			<content:encoded><![CDATA[<p>Nella prima parte abbiamo creato l&#8217;oggetto &#8220;Model&#8221; della applicazione Currency converter, i questa seconda parte creeremo l&#8217;oggetto &#8220;View&#8221; cioè l&#8217;interfaccia grafica dell&#8217;applicazione. Per creare l&#8217;interfaccia grafica il tool di sviluppo Xcode mette a disposizione un&#8217;applicazione chiamata Interface Builder. IB ci permette di creare in modo visuale un&#8217;interfaccia grafica funzionante attraverso una libreria di oggetti grafici standard predefiniti (UI design) e una finestra ispettiva dove possiamo impostare le proprietà di ogni oggetto. IB permette inoltre di creare i collegamenti fra i vari oggetti grafici.</p>
<p><strong>I file Nib</strong></p>
<p>Ogni applicazione Cocoa dotata di interfaccia grafica ha almeno un Nib file. Il Nib file principale viene caricato automaticamente all&#8217;avvio dell&#8217;applicazione e generalmente contiene un menu e una finestra con altri oggetti sopra.</p>
<p>Ogni Nib file contiene:</p>
<ul>
<li><strong>Archivio degli oggetti</strong>: esso contiene le informazioni sugli oggetti come le dimensioni, il posizionamento e la posizione nella gerarchia degli oggetti. Il livello più alto delle gerchia degli oggetti archiviati è occupato da File’s Owner object, una specie di proxy che in fase di runtime diventa l&#8217;oggetto padrone del Nib file.</li>
<li><strong>Immaggini</strong>: le immagini che compongono la nostra interfaccia utente come ad esempio bottoni o pulsanti.</li>
<li><strong>Class references</strong>: IB conserva le informazioni sugli oggetti che compongono l&#8217;interfaccia ma non conosce le classi che avete sviluppato, come ad esempio la nostra classe Converter che rappresenta il &#8220;model&#8221; della nostra applicazione, perchè non può accedere al loro codice. Per ogniuna di queste classi IB mette a disposizione una specie di oggetto proxy a cui vengono applicate le informazioni sulla classe.</li>
<li><strong>Connection information</strong>: le informazioni circa i collegamenti fra i vari oggetti che compongono l&#8217;interfaccia.</li>
</ul>
<p><strong>Apriamo Interface Builder</strong></p>
<p>Per aprire il IB è sufficiente fare doppio click sul file MainMenu.xib nella finestra di progetto di Xcode. Currency Converter ha una finestra principale (Main Window) sulla quale si eseguono tutte le operazioni che svolge l&#8217;applicazione. IB crea per noi un Main Menu con alcuni menu di default e una finestra che rappresenta la Main Windows di Currency Converter. L&#8217;interfaccia di IB è costituita poi da altre 3 finestre:</p>
<ul>
<li><strong>Library</strong>: contiene tutti gli oggetti, le classi e i media che possiamo utilizzare nella nostra applicazione. Possiamo inserire nella libreria oggetti, classi e  media personalizzati.</li>
<li><strong>Attributes o inspector</strong>: contiene gli attributi dell&#8217;oggetto correntemente selezionato. Se ad esempio selezionate la nostra Main Window nella finestra compariranno tutti i relativi attributi.</li>
<li><strong>La finestra principal</strong>e: quale file nib è aperto e quali sono gli oggetti che lo compongono.</li>
</ul>
<div id="attachment_610" class="wp-caption aligncenter" style="width: 590px"><a href="http://www.slweb.it/wp/wp-content/uploads/2009/10/interface_builder.jpg"><img class="size-full wp-image-610" title="Interface Builder" src="http://www.slweb.it/wp/wp-content/uploads/2009/10/interface_builder.jpg" alt="Come si presenta IB appena lo apro cliccando su MainMenu.xib Di Currency Converter" width="580" height="343" /></a><p class="wp-caption-text">Come si presenta IB appena lo apro cliccando su MainMenu.xib Di Currency Converter</p></div>
<p>Conviene dare uno sguardo a IB per familiarizzare con le sue componenti prima di andare avanti, io ci ho passato un paio d&#8217;ore giocando con gli oggetti e cercando di capirne le caratteristiche attraverso l&#8217;ispector. Magari fatelo su un progetto vuoto.</p>
<p><strong>Modifichiamo la Main Window</strong></p>
<p>Possiamo ridimensionare la finestra manualmente semplicemente afferrandola per l&#8217;angolo in basso a destra. Selezionando la finestra e facendo clic sull&#8217;iconcina a forma di righello nell&#8217;ispector possiamo impostare nei campi width e height i valori 400 e 200 per dimensionare correttamente la finestra. Possiamo inoltre scegliere la posizione iniziale della finestra, che normalmente dovrebbe essere in alto a sinistra.</p>
<p>Cliccando sulla prima iconcina nell&#8217;ispector possiamo impostare gli attributi della finestra fra cui il titolo. IB ha già impostato questo valore con il nome dell&#8217;applicazione, questo è sicuramente un buon titolo in questo caso quindi lo lasciamo inalterato.</p>
<p><strong>Inseriamo i textField</strong></p>
<p>Nella finestra libreria selezioniamo Objects per mostrare gli oggetti e poi navighiamo nella libreria Library -&gt; Cocoa -&gt; Views &amp; Cells -&gt; Inputs &amp; Values.</p>
<p>Prendiamo l&#8217;oggetto NSTextField e trasciniamolo nella finestra di Currency Converter, IB ci guiderà nel corretto posizionamento del campo in alto a destra mostrandoci delle linee guida quando ci avviciniamo ai bordi della finestra.</p>
<div id="attachment_612" class="wp-caption aligncenter" style="width: 354px"><a href="http://www.slweb.it/wp/wp-content/uploads/2009/10/linee_guida.jpg"><img class="size-full wp-image-612" title="IB e le linee guida" src="http://www.slweb.it/wp/wp-content/uploads/2009/10/linee_guida.jpg" alt="Avvicinandosi ai bordi e ad altri oggetti IB mostra delle comode linee guida per allineare e distanziare correttamente gli oggetti" width="344" height="177" /></a><p class="wp-caption-text">Avvicinandosi ai bordi e ad altri oggetti IB mostra delle comode linee guida per allineare e distanziare correttamente gli oggetti</p></div>
<p>Allunghiamo il campo appena aggiunto per portarlo intorno ai 150 pixel di lunghezza. Con il campo selezionato premiamo Ctrl-D per duplicarlo. Posizioniamo il campo duplicato immediatamente sotto il precedente sfruttando sempre le solite linee guida. Ripetiamo l&#8217;operazione per il terzo campo.</p>
<p>Aggiungiamo ora le etichette che indicano cosa sono i tre campi che abbiamo appena aggiunti. Prendiamo una label dalla Library e posizioniamola a sinistra del primo campo di testo. Nell&#8217;ispector negli attributi della label impostate l&#8217;allineamento a destra e il titolo della label &#8220;Exchange Rate per €1:&#8221;. Stiamo facendo l&#8217;applicazione in inglese come nel tutorial perché poi proveremo a creare la localizzazione in italiano.</p>
<p>Ridimensioniamo la label in modo che compaia tutto il testo. Ripetiamo per le altre due label &#8220;Euro to convert&#8221; e &#8220;Amount in Other Currency:&#8221;</p>
<div id="attachment_613" class="wp-caption aligncenter" style="width: 410px"><a href="http://www.slweb.it/wp/wp-content/uploads/2009/10/finestra_stato_1.jpg"><img class="size-full wp-image-613" title="La finestra con i campi" src="http://www.slweb.it/wp/wp-content/uploads/2009/10/finestra_stato_1.jpg" alt="Adesso la finestra di Currency Converter dovrebbe essere così" width="400" height="222" /></a><p class="wp-caption-text">Adesso la finestra di Currency Converter dovrebbe essere così</p></div>
<p>Per concludere dobbiamo impostare l&#8217;attributo Editable del 3° TextField su false in modo che l&#8217;utente non possa cambiare il valore del campo. Selezioniamo quindi il 3° TextField e nell&#8217;ispector visualizziamo gli attributi e deselezioniamo Editable. Lasciamo invece selezionato Selectable per permettere la selezione e il copia del valore.</p>
<p><strong>Inseriamo e configuriamo il pulsante.</strong></p>
<p>Dalla Library prendiamo nella sezione Buttons un PushButton e posizioniamolo al di sotto del 3° campo di testo. Spostiamolo un pò più giu. Doppio Click sul pulsante appena aggiunto per modificare il titolo in &#8220;Convert&#8221;. Inseriamo un linea di separazione fra il bottone e i campi di testo. Come al solito la prendiamo dalla Library e l&#8217;allineiamo tramite le linee guida subito sotto il 3° campo di testo, allunghiamola a destra e sinistra fin quando non compaiono le linee guida. Posizioniamo il pulsante convert subito al di sotto del separatore sempre usufruendo delle guide automatiche. Seguire queste guide automatiche è importantissimo perché sono gli spazi raccomandati dalla guida Apple Human Interface Guidelines. La Apple Human Interface Guidelines è veramente una sorta di testo sacro sull&#8217;interfaccia grafica del mac e dovrebbe assolutamente essere letta e studiata per comprendere a fondo come realizzare un&#8217;interfaccia in perfetto stile Apple.</p>
<p><strong>Rifiniamo la nostra interfaccia</strong></p>
<p>Possiamo rifinire l&#8217;interfaccia appena creata sfruttando qualche funzionalità di IB. Selezioniamo tutte e 3 le Label e clicchiamo sul menu Layout &gt; Size to fit per dimensionare le Label alla loro larghezza minima. Clicchiamo poi sempre su Layout &gt; Alignment &gt; Align Right Edges per allineare le Label sull&#8217;angolo destro. Spostiamo infine le Label sulla sinistra fin quando non appare la linea guida. Selezioniamo e spostiamo a sinistra i 3 Text Field fin quando non compare la linea guida. Dimensioniamo ora nuovamente il Separatore per farlo coincidere con il lato destro dei Text Field. Spostiamo il pulsante per centrarlo con l&#8217;ultimo Text Field. Ridimensioniamo la finestra fin quando non compaiono tutte le linee guida. Ok l&#8217;interfaccia è ottimizzata più facile a farsi che a dirsi.</p>
<div id="attachment_615" class="wp-caption aligncenter" style="width: 377px"><a href="http://www.slweb.it/wp/wp-content/uploads/2009/10/finestra_stato_fiita.jpg"><img class="size-full wp-image-615" title="La finestra finita" src="http://www.slweb.it/wp/wp-content/uploads/2009/10/finestra_stato_fiita.jpg" alt="La finestra di Currency Converter finita" width="367" height="197" /></a><p class="wp-caption-text">La finestra di Currency Converter finita</p></div>
<p>Ultima chicca impostiamo il tasto return come Key Equivalent per premere il pulsante. Selezioniamo il pulsante e andiamo negli attributi, selezioniamo l&#8217;attributo Key Equiv. e premiamo il tasto return.</p>
<p><strong>Abilitiamo il Tabbing fra i campi di testo</strong></p>
<p>Vogliamo fare in modo che premendo il tatso Tab si passi da un campo all&#8217;altro. Per far ciò selezioniamo il campo Exchange Rate e tenendo premuto il tasto Ctrl clicchiamo e tiriamo un collegamento fino al campo Euro to convert. Nella pannello semitrasparente selezioniamo nel gruppo Outlets  &#8221;nextKeyView&#8221;. Ripetiamo la procedura all&#8217;inverso.</p>
<p><strong>Impostiamo il First Responder</strong></p>
<p>Impostiamo Exchange Rate come primo campo selezionato all&#8217;avvio dell&#8217;applicazione. Per far ciò dobbiamo selezionare l&#8217;istanza della nostra finestra nella finestra MainMenu.nib  e tenendo premuto il tasto Ctrl creare una connessione con il campo Exchange Rate per €1. Nel pannello che appare selezioniamo &#8220;initialFirstResponder&#8221;.</p>
<p>Bene ora la nostra interfaccia è pronta possiamo salvare e testare l&#8217;interfaccia attraverso il menu File &gt; Simulate Interface.</p>
<p>Nella prossima parte realizzeremo il Controller, cioè il ponte fra l&#8217;interfaccia (View) e il Model.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.slweb.it/wp/23102009/studiando-cocoa-currency-converter-parte-2%c2%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(Studiando cocoa) Currency converter Parte 1°</title>
		<link>http://www.slweb.it/wp/16102009/studiando-cocoa-currency-converter-parte-1%c2%b0/</link>
		<comments>http://www.slweb.it/wp/16102009/studiando-cocoa-currency-converter-parte-1%c2%b0/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 10:54:49 +0000</pubDate>
		<dc:creator>stefano</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.slweb.it/wp/?p=581</guid>
		<description><![CDATA[Seguendo il tutorial di Apple costruiamo questo piccolo software che permette di convertire il valore di una moneta in un altra attraverso il suo tasso di cambio. Ovviamente trovate il tutorial nella documentazione di xcode in inglese, io qui non faccio una mera traduzione ma seguo il percorso e faccio le mi belle osservazioni. Vi [...]]]></description>
			<content:encoded><![CDATA[<p>Seguendo il tutorial di Apple costruiamo questo piccolo software che permette di convertire il valore di una moneta in un altra attraverso il suo tasso di cambio. Ovviamente trovate il tutorial nella documentazione di xcode in inglese, io qui non faccio una mera traduzione ma seguo il percorso e faccio le mi belle osservazioni. Vi consiglio nel seguire il tutorial di non copiare ed incollare il codice Obj-C ma di scriverlo così da capirlo e memorizzarlo meglio.</p>
<p>Per prima cosa bisogna aprire xcode e creare un nuovo progetto partendo dal menu File &gt; New Project.</p>
<p>Nella finestra che contiene alcuni tipi di progetto pre-impostati scegliete  Cocoa Application, non selezionate alcuna opzione e cliccate sul pulsante choose&#8230;</p>
<p>Vi verrà chiesto di salvare il progetto, inserite il nome Currency converter, scegliete una posizione idonea e salvate. Dovreste ora visualizzare una finestra simile a questa in figura.</p>
<div id="attachment_583" class="wp-caption aligncenter" style="width: 590px"><a href="http://www.slweb.it/wp/wp-content/uploads/2009/10/Schermata-2009-10-08-a-16.05.jpg"><img class="size-full wp-image-583" title="Schermata - xcode" src="http://www.slweb.it/wp/wp-content/uploads/2009/10/Schermata-2009-10-08-a-16.05.jpg" alt="Schermata - xcode" width="580" height="452" /></a><p class="wp-caption-text">Schermata - xcode</p></div>
<p>Il passo successivo e creare l&#8217;oggetto <em>Model</em> della nostra applicazione. Come abbiamo visto nell&#8217;articolo su MVC, l&#8217;oggetto <em>Model</em> rappresenta i dati e le azioni che si posso fare su di essi. Nella programmazione ad oggetti, l&#8217;oggetto non è  altro che una istanza di una classe. Dobbiamo quindi creare una nuova classe nel nostro progetto. Per far ciò selezioniamo la cartellina Classes nella colonna di destra della finestra principale di xcode e poi menu File &gt; New file&#8230; o semplicemente mela N. Si apre ancora un wizzard che ci permette di scegliere che tipo di file vogliamo aggiungere al nostro progetto.  Scegliamo il modello Objective-C Class nel gruppo cocoa class e scegliamo NSObject nel menu a tendina subclass of. Prossimamente vedremo bene che cosa significa sottoclasse, per ora ci basta sapere che cocoa mette a disposizione una classe padre, NSObject appunto, che fornisce tutto quello che serve per creare e gestire un oggetto nell&#8217;ambiente cocoa. Derivando la nostra classe da NSObject, essa erediterà tutte le caratteristiche di NSObject. In Obj-c, nella gerarchia delle classi, può esistere una sola classe padre genitrice di tutte le altre. Benché sia possibile in Cocoa creare una classe padre, di fatto esiste appunto NSObject che svolge questo compito egregiamente rendendo superfluo lo sviluppo di un&#8217;altra classe padre. Questo concetto è comunque alla base della programmazione ad oggetti, se non lo conoscete occorre una pausa per capirlo bene legendo un pò di documentazione al riguardo.</p>
<p>Bene clicchiamo su next e nella successiva schermata specifichiamo il nome della nostra classe: <em>Converter. </em>Clicchiamo su Finish, xcode aggiungerà due file nel gruppo Classes: l&#8217;interfaccia converter.h e l&#8217;implemtazione converter.m . Perché due file? Vediamolo!</p>
<p>In Objective C una classe  è composta da 2 elementi principali:</p>
<ul>
<li>Una interfaccia dove vengono dichiarate le variabili, le proprietà e i metodi della classe cioè le funzioni che operano sui dati. L&#8217;interfaccia della classe si scrive nel file .h.</li>
<li>Un&#8217; implementazione, cioè il codice vero e proprio che esegue le azioni sui dati. L&#8217;implementazione  della classe si scrive nel file .m</li>
</ul>
<p>La programmazione ad oggetti ha svariati vantaggi fra questi la possibilità di creare e riutilizzare i singoli oggetti sapendo soltanto cosa essi fanno e non come lo fanno. L&#8217;interfaccia serve a proprio a questo, a dirci cosa fa una certa classe! L&#8217;implementazione invece ci dice come fa una certa cosa quella classe ma questo nell&#8217;utilizzo dell&#8217;oggetto è ininfluente. Infatti nel normale utilizzo di un oggetto il suo contenuto rimane incapsulato al suo interno e noi accediamo ai suoi dati attraverso i metodi e le proprietà. Di fatto possiamo utilizzare oggetti implementati da altri senza conoscerne l&#8217;implementazione ma soltanto l&#8217;interfaccia. Ad esempio, in Cocoa, useremo spesso la Classe NSString che, istanziata, crea un oggetto adatto a manipolare una stringa  senza conoscerne affatto  l&#8217;implementazione. Dunque, benché sia possibile scrivere interfaccia e implementazione nello stesso file, è opportuno separarli in due file, .h e. m appunto, per separare i due concetti perché è appunto sufficiente l&#8217;interfaccia per conoscere ed usare la classe. Ci sono anche altri vantaggi ma per questi vi rimando a studi più approfonditi sulle classi.</p>
<p>Tornando al nostro tutorial apriamo il file converter.h e iniziamo a scrivere l&#8217;interfaccia del nostro oggetto model.</p>
<p>Notiamo che Xcode ha già fatto qualcosa per noi infatti troviamo già il seguente codice:</p>
<p><code>#import &lt;Cocoa/Cocoa.h&gt;<br />
@interface Converter : NSObject {<br />
}<br />
@end</code></p>
<p>Come possiamo vedere, poiché abbiamo dichiarato che la nostra classe è figlia di NSObject, xcode ha prontamente inserito la direttiva necessaria per includere le classi Cocoa:</p>
<p><code>#import &lt;Cocoa/Cocoa.h&gt;</code></p>
<p>Da notare che la direttiva #import dell&#8217; Ojective-C a differenza di quella #include nel C include il file solo se non è stato già incluso, forte no!</p>
<p>Xcode ha poi dichiarato già la nostra interfaccia attraverso la direttiva @interface, ogni dichiarazione di interfaccia in Objective-C inizia con @interface e finisce con @end</p>
<p>La dichiarazione come vediamo ha  la seguente sintassi:</p>
<p><code>@interface NomeClasse : ClasseGenitrice { dichiarazione delle variabili }</code></p>
<p>Il nostro oggetto Model è piuttosto semplice poiché è costituito da un una classe &#8220;Converter&#8221; da due variabili, una con la cifra da convertire e una con il tasso di cambio, entrambe di tipo float e da un solo metodo convertCurrency che moltiplica la cifra da convertire per il tasso di cambio e torna il risultato.</p>
<p>Per prima cosa dichiariamo le due variabili, tale dichiarazione va fatta all&#8217;interno delle parentesi graffe!</p>
<p><code>float sourceCurrencyAmmount, rate;</code></p>
<p>Come vedete uso gli stessi nomi del tutorial sulla documentazione Apple, così da poter confrontare e approfondire con la documentazione originale. Il nostro Converter.h si presenta così ora:</p>
<p><code>#import &lt;Cocoa/Cocoa.h&gt;<br />
@interface Converter : NSObject {<br />
    float sourceCurrencyAmount, rate;<br />
}<br />
@end</code></p>
<p>Le variabili dichiarate all&#8217;interno di una classe sono private, cioè sono utilizzabili solo dal codice all&#8217;interno della stessa. E&#8217; necessario quindi definire dei metodi per poter accedere a queste variabili dall&#8217;esterno. Questi metodi sono i così detti <em>getter</em> e <em>setter</em>. In Obj-c 2.0 esiste una scorciatoia  per definire tali metodi: dichiarare delle <em>Property</em>. Dichiarando una proprietà il compilatore creerà automaticamente il metodi getter e setter per quella proprietà. Una proprietà si dichiara così:</p>
<p><code>@property(attributi) Tipo listaNomiVariabili;</code></p>
<p>Gli attributi definisco il modo in cui si può accedere alla proprietà, essi possono essere <em>readwrite</em>, r<em>eadonly</em>, <em>copy </em>etc, vi consiglio di vedere la guida The Objective-C 2.0 Programming Language. Per ora ci basti sapere che senza specificare gli attributi, o specificando soltanto l&#8217;attributo readwrite il compilatore creerà soltanto i metodi getter e setter utilizzando i nomi nomeProperty per il getter e setNomeProperty per il setter.</p>
<p>Poiché vogliamo accedere alle nostre variabili dichiariamo due property, tale dichiarazione va fatta subito dopo la chiusura delle parentesi graffe.</p>
<p><code>@property(readwrite) float sourceCurrencyAmount, rate;</code></p>
<p>Con questa dichiarazione abbiamo di fatto dichiarato anche  metodi</p>
<p><code>- (float)sourceCurrencyAmount;<br />
- (void)setSourceCurrencyAmount:(float)newSourceCurrencyAmount;<br />
- (float)rate;<br />
- (void)setRate:(float)newRate;</code></p>
<p>Bel risparmio no! con una riga s&#8217;è scritto l&#8217;equivalente di 4! </p>
<p>Se vi state chiedendo come si dichiara un metodo vi accontento subito dichiarando l&#8217;unico metodo della nostra classe</p>
<p><code>- (float) convertCurrency;</code></p>
<p>Tale dichiarazione va inserita subito dopo quella delle proprietà, come vedete la dichiarazione dei metodi deve iniziare con un segno &#8211; seguita dal tipo restituito tra parentesi tonde e dal nome del metodo.</p>
<p><code>- (tipoRestituito) nomeMetodo</code></p>
<p>Il segno meno è obbligatorio ed indica che il metodo è un metodo di istanza, cioè un metodo che può essere chiamato su una istanza (oggetto) della classe. I metodi di classe invece vengono dichiarati con il segno +, questi sono metodi che vengono eseguiti dalla classe prima che questa venga istanziata. Un esempio di metodo di classe potrebbe essere il metodo che si occupa di riservare la porzione di memoria  idonea a contenere il nostro oggetto. Se vi state chiedendo se la nostra classe ha bisogno di questi metodi la risposta è certamente si tuttavia non abbiamo bisogno di dichiarali a quanto pare. Non ne sono ancora sicuro al momento ma secondo me c&#8217;entra NSObject!!!</p>
<p>La dichiarazione del metodo prosegue con il tipo restituito messo tra parentesi tonde e il nome del metodo. Se un metodo non restituisce nulla occorre specificare void come tipo restituito.</p>
<p>Con la dichiarazione del metodo la nostra interfaccia è completa e dovrebbe mostrarsi così:</p>
<p><code>#import &lt;Cocoa/Cocoa.h&gt;<br />
<br />
@interface Converter : NSObject {<br />
    //dichiarazione delle variabili<br />
    float sourceCurrencyAmount, rate;<br />
}<br />
<br />
//dichiarazione delle proprietà<br />
@property(readwrite) float sourceCurrencyAmount, rate;<br />
<br />
//dichiarazione dei metodi<br />
- (float) convertCurrency;<br />
@end</code></p>
<p> possiamo salvare il file Converter.h e passare all&#8217;implementazione della classe nel file Converter.m</p>
<p>Anche in questo caso Xcode ha già fatto qualcosa per noi come vedete il file converter.m si presenta così:</p>
<p><code>#import "Converter.h"<br />
@implementation Converter<br />
<br />
@end</code></p>
<p>Questo ci fa capire subito alcune cose, nel file .m è necessario importare il relativo file .h (mi sembra ovvio ma è meglio ripeterlo), similmente all&#8217;interfaccia anche l&#8217;implementazione incomincia con la direttiva</p>
<p><code>@implementation NomeClasse </code></p>
<p>e termina con la direttiva </p>
<p><code>@end</code></p>
<p>Tutto il codice di implementazione va inserito fra queste due direttive.</p>
<p>La prima cosa da fare è istruire il compilatore sulle due property che abbiamo dichiarato. L&#8217; istruzione:</p>
<p><code>@synthesize listaNomiPorpertys</code></p>
<p>dice al compilatore di creare i metodi getter and setter per le proprietà specificate quindi:</p>
<p><code>@synthesize sourceCurrencyAmount, rate;</code></p>
<p>Anche in questo caso il risparmio di codice è notevole non dovendo implementare ben 4 metodi. L&#8217;istruzione @synthesize creerà questi metodi soltanto se non sono stati implementati, questo significa che se abbiamo esigenze d&#8217; implementazione particolari per uno dei metodi getter e setter possiamo sempre farlo manualmente anche se abbiamo dichiarato la variabile come property!</p>
<p>Dobbiamo ora implementare il metodo convertCurrency che abbiamo dichiarato:</p>
<p><code>- (float) convertCurrency {<br />
    //il metodo ritorna la moltiplicazione delle due variabili<br />
    return self.sourceCurrencyAmount * self.rate;<br />
}</code></p>
<p>Come vedete il metodo  è semplicissimo, notiamo l&#8217;uso di self che in sostanza indica di utilizzare il valore della variabile interna all&#8217;oggetto. L&#8217;istruzione return ritorna il valore della moltiplicazione alla sua destra. </p>
<p>Il mio converter.m si mostra esattamente così:</p>
<p><code>#import "Converter.h"<br />
<br />
@implementation Converter<br />
<br />
//implemento le property<br />
@synthesize sourceCurrencyAmmount, rate;<br />
<br />
//implemento currencyConvert<br />
- (void) currencyConvert {<br />
	return self.sourceCurrencyAmmount * self.rate;<br />
}<br />
<br />
@end</code></p>
<p>Ok si conclude qui la prima parte del tutorial, nella seconda ci occuperemo di creare l&#8217;interfaccia grafica con interface builder e di collegarla alla nostra classe. Chiedo scusa per le eventuali imprecisioni e/o omissioni, accetto ben volentieri correzioni, critiche e consigli e tenete presente che questi sono perlopiù appunti che sto prendendo io nello studio di cocoa che non hanno la pretesa di insegnare qualcosa a qualcuno.</p>
<p>Ciao</p>
]]></content:encoded>
			<wfw:commentRss>http://www.slweb.it/wp/16102009/studiando-cocoa-currency-converter-parte-1%c2%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(Studiando cocoa) Lo schema di progettazione MVC</title>
		<link>http://www.slweb.it/wp/08102009/studiando-cocoa-lo-schema-di-progettazione-mvc/</link>
		<comments>http://www.slweb.it/wp/08102009/studiando-cocoa-lo-schema-di-progettazione-mvc/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 13:45:17 +0000</pubDate>
		<dc:creator>stefano</dc:creator>
				<category><![CDATA[Cocoa]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.slweb.it/wp/?p=574</guid>
		<description><![CDATA[Con questo articolo parte una mini serie dedicata allo studio dell&#8217;ambiente di sviluppo per Mac Os X e iPhone os che sto iniziando ad intraprendere in questi giorni. Man mano che vado avanti farò il resoconto di quello che ho studiato. Anche perché questo è uno dei metodi migliori per imparare. Fermo restando che non [...]]]></description>
			<content:encoded><![CDATA[<p>Con questo articolo parte una mini serie dedicata allo studio dell&#8217;ambiente di sviluppo per Mac Os X e iPhone os che sto iniziando ad intraprendere in questi giorni. Man mano che vado avanti farò il resoconto di quello che ho studiato. Anche perché questo è uno dei metodi migliori per imparare. Fermo restando che non sono completamente a digiuno di objective-c, in questo articolo vedremo il tutorial proposto dalla Apple: The Essence of Cocoa. Ovviamente man mano che andrò avanti cercherò di approfondire e capire i vari aspetti anche del linguaggio Obj-c.</p>
<p>MVC o <strong>Model View Controller</strong> è lo schema di progettazione principale dell&#8217;ambiente di sviluppo cocoa, esso deriva da smalltalk-80. Questo schema propone tre tipi di oggetti in una applicazione, separati da limiti astratti e allo stesso tempo collegati fra loro proprio attraverso questi limiti. La figura chiarisce meglio il concetto.</p>
<div id="attachment_577" class="wp-caption aligncenter" style="width: 430px"><a href="http://www.slweb.it/wp/wp-content/uploads/2009/10/cocoa_mvc1.gif"><img class="size-full wp-image-577" title="Schema Model-View-Controller" src="http://www.slweb.it/wp/wp-content/uploads/2009/10/cocoa_mvc1.gif" alt="Fig. 01 - Schema Model-View-Controller" width="420" height="176" /></a><p class="wp-caption-text">Fig. 01 - Schema Model-View-Controller</p></div>
<p><strong>L&#8217;oggetto Model</strong></p>
<p>Gli oggetti di tipo <em>Model</em> contengono i dati e le operazioni che si possono svolgere su questi. Ad esempio in una applicazione gestionale supponiamo di avere un oggetto &#8220;Clienti&#8221; che contiene i dati relativi ai clienti come ad esempio il loro nome. Ecco questo è uno oggetto <em>Model </em>perchè contiene i dati di ciò che rappresenta e i metodi per accedere agli stessi.</p>
<p><strong>L&#8217;oggetto View</strong></p>
<p>L&#8217;oggetto <em>View</em> rappresenta l&#8217;interfaccia grafica con cui vengono presentati i dai all&#8217;utente. Normalmente l&#8217;oggetto <em>View</em> non conosce la fonte dei dati che rappresenta sullo schermo. L&#8217;Application Kit che è uno dei framework che compongono l&#8217;ambiente cocoa contiene numerosi oggetti comuni per le viste come finestre, pulsanti, barre di progressione etc. E&#8217; comunque sempre possibile costruirne di personalizzati.</p>
<p><strong>L&#8217;oggetto  Controller</strong></p>
<p>Questo oggetto esplica una mediazione fra l&#8217;oggetto Model e l&#8217;oggetto View, praticamente mette in comunicazione gli altri due trasferendo le informazioni. Ad esempio può mostrare il nome di un cliente  in uno specifico campo di testo nella finestra dell&#8217;applicazione.</p>
<p>Lo schema MVC, se bene possa essere alla base di molte applicazioni non deve essere necessariamente seguito alla lettera. In alcuni casi particolari come  per esempio applicazioni molto semplici e possibile inserire il <em>controller</em> nel <em>model</em>.</p>
<p>Ho trattato prima di tutto questo argomento perché seguendo i tutorial proposti da Apple vi troverete difronte a questo schema quasi sempre. In effetti solo dopo aver letto la documentazione su MVC ho capito meglio alcuni passaggi.</p>
<p>Il prossimo articolo vedremo il tutorial sul currency converter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.slweb.it/wp/08102009/studiando-cocoa-lo-schema-di-progettazione-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
