(Studiando cocoa) Currency converter Parte 4°
Nelle precedenti parti abbiamo creato l’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 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à.
Dunque ho modificato ConverterControlle.m per utilizzare queste due classi così:
- (IBAction)convert:(id)sender
{
//dichiaro una variabile per contenere un oggetto NSString
//che conterrà il valore della conversione sottoforma di una
//stringa opportunamente formattata.
NSString *amount;
//Creo un'istanza di converter
converter = [[Converter alloc]init];
//chiamo il metodo setSourceCurrencyAmount passandogli il valore del TextFiled
//euroField
[converter setSourceCurrencyAmount:[euroField floatValue]];
//chiamo il metodo setRate passandogli il valore di rateField
[converter setRate:[rateField floatValue]];
//creo un oggetto NSNumberFormatter
NSNumberFormatter *myNumberFormatter = [[NSNumberFormatter alloc] init];
//setto i parametri per la formattazione
[myNumberFormatter setMaximumFractionDigits:2];
[myNumberFormatter setMinimumFractionDigits:2];
//creo la stringa formattata, è necessario passare un NSNumber che creo a partire dal float che
//mi torna convertCurrency
amount = [myNumberFormatter stringFromNumber: [NSNumber numberWithFloat:[converter convertCurrency]]];
//imposto il valore del campo amountField con il valore della variabile di metodo
[amountField setStringValue:amount];
//torno al campo di testo degli euro da convertire
[euroField selectText:self];
}
Come possiamo notare ho tolto la dichiarazione della variabile float e l’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.
NSNumberFormatter *myNumberFormatter = [[NSNumberFormatter alloc] init];
Setto poi il comportamento di NSNumberFormatter con i decimali.
[myNumberFormatter setMaximumFractionDigits:2];
[myNumberFormatter setMinimumFractionDigits:2];
Poi chiamo il metodo stringFrom Number che pretende come parametro un NSNumber e torna come risultato una NSString. Memorizzo l’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.
mount = [myNumberFormatter stringFromNumber: [NSNumber numberWithFloat:[converter convertCurrency]]];
Infine assegno la variabile amount al campo di testo con il metodo setStringValue.
[amountField setStringValue:amount];
In questo modo l’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’internazionalizzazione dei numeri.
Ottimizziamo il menu
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.
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’istanza della classe che controlla il menu font nella finestra MainMenu.xib
Un’altra piccola cosa è quella di impostare l’allineamento a destra dei campi, a me piacciono i più i numeri allineati a destra stile calcolatrice.
Salviamo e chiudiamo IB
Localizziamo in italiano
Per localizzare in italiano la nostra applicazione occorre sostanzialmente tradurre soltanto l’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.
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’Applicazione non funzionerà quindi non traducetelo.
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->archivio, edit->modifica etc.
Bene salvate tutto e chiudete IB. In Xcode date un bel clean e ricompilate tutto. Ecco a voi Currency Converter in italiano.
L’icona
Icon Composer
Per impostare l’icona dell’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 > Applications > Utilities, non vi spiego come si fa è talmente banale che vi divertite da soli. Tenete presente che per Leopard occorre disegnare l’icona di ben 512×512 pixel, poichè le icone grandi vengono mostrate nella visuale coverflow del finder.
Una volta che avete creato l’icona salvate il file con il nome APPL.icns all’interno della cartella del progetto. Per concludere in Xcode editate il file:
- Currency_Converter-info.plist
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’icona.
Bene e con questo si conclude il progetto Currency Converter, certo manca il file dell’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.
Ciao






Commenti recenti