<?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>Bubi Devs &#187; DevTutorial</title>
	<atom:link href="http://www.bubidevs.net/category/devtutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bubidevs.net</link>
	<description>&#34;Siate affamati. Siate folli&#34;</description>
	<lastBuildDate>Sun, 15 Jan 2012 17:24:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>DevTutorial #27 &#8211; Incremento automatico del numero di build e data in un progetto</title>
		<link>http://www.bubidevs.net/2010/03/23/devtutorial-27-incremento-automatico-del-numero-di-build-e-data-in-un-progetto/</link>
		<comments>http://www.bubidevs.net/2010/03/23/devtutorial-27-incremento-automatico-del-numero-di-build-e-data-in-un-progetto/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 08:00:10 +0000</pubDate>
		<dc:creator>Andrea Busi</dc:creator>
				<category><![CDATA[DevTutorial]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[Bundle version]]></category>
		<category><![CDATA[CFBuildDate]]></category>
		<category><![CDATA[CFBuildNumber]]></category>
		<category><![CDATA[numero versione]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Xcode]]></category>

		<guid isPermaLink="false">http://www.bubidevs.net/?p=4793</guid>
		<description><![CDATA[In questo nuovo tutorial vedremo come realizzare una cosa molto particolare, che potrà tornare utile soprattutto quando distrubuirete l&#8217;applicazione a diversi beta tester. Vedremo, infatti, come inserire all&#8217;interno del nostro progetto (oltre al classico numero di versione dell&#8217;applicazione) un numero di build progressimo, insieme anche alla data della build in questione. Utilizzeremo uno script automatico,...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="alignnone" src="http://www.bubidevs.net/Immagini/Logo-DevTutorial.png" alt="" width="490" height="200" /></p>
<p>In questo nuovo tutorial vedremo come realizzare una cosa molto particolare, che potrà tornare utile soprattutto quando distrubuirete l&#8217;applicazione a diversi beta tester.</p>
<p>Vedremo, infatti, come inserire all&#8217;interno del nostro progetto (oltre al classico numero di versione dell&#8217;applicazione) un numero di build progressimo, insieme anche alla data della build in questione.</p>
<p>Utilizzeremo uno script automatico, che ad ogni build creata aumenterà il numero di build e aggiornerà la data della build Potremo, così, avere sempre sotto controllo l&#8217;esatta versione della nostra applicazione, in modo da avere un controllo completo su tutte le versioni.</p>
<p>Buon tutorial!</p>
<p><span id="more-4793"></span></p>
<h1>1. Inseriamo lo script</h1>
<p>Entriamo nel progetto in cui vogliamo inserire l&#8217;incremento automatico del numero di versione. Facciamo clic con il tasto destro sul nome del nostro progetto e scegliamo &#8220;Add -&gt; New Build Phase -&gt; New Run Script Build Phase&#8221;.</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-21.20.14.png"><img class="alignnone size-large wp-image-4796" title="Schermata 2010-03-15 a 21.20.14" src="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-21.20.14-499x119.png" alt="" width="499" height="119" /></a></p>
<p>Si aprirà una schermata come questa:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-21.22.45.png"><img class="alignnone size-large wp-image-4795" title="Schermata 2010-03-15 a 21.22.45" src="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-21.22.45-500x530.png" alt="" width="500" height="530" /></a></p>
<p>in cui dovremo andare ad inserire lo script necessario. Eccovelo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #666666; font-style: italic;"># Auto Increment Version Script</span>
<span style="color: #007800;">buildPlist</span>=<span style="color: #ff0000;">&quot;prova-Info.plist&quot;</span>
<span style="color: #007800;">CFBuildNumber</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Print CFBuildNumber&quot;</span> <span style="color: #007800;">$buildPlist</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #007800;">CFBuildNumber</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">$CFBuildNumber</span> + <span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">&lt;</span>div <span style="color: #007800;">id</span>=<span style="color: #ff0000;">&quot;_mcePaste&quot;</span><span style="color: #000000; font-weight: bold;">&gt;/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Set :CFBuildNumber <span style="color: #007800;">$CFBuildNumber</span>&quot;</span> <span style="color: #007800;">$buildPlist</span>
<span style="color: #007800;">CFBuildDate</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">date</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>PlistBuddy <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;Set :CFBuildDate <span style="color: #007800;">$CFBuildDate</span>&quot;</span> <span style="color: #007800;">$buildPlist</span><span style="color: #000000; font-weight: bold;">&lt;/</span>div<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Ovviamente dovete modificare la stringa <em>buildPlist=&#8221;prova-Info.plis&#8221;</em>, inserendo il nome del vostro file &#8220;.plist&#8221; (che sarà nella forma &#8220;nome_progetto-Info.plist&#8221;).</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-21.23.21.png"><img class="alignnone size-large wp-image-4797" title="Schermata 2010-03-15 a 21.23.21" src="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-21.23.21-500x530.png" alt="" width="500" height="530" /></a></p>
<p>Chiudete pure tale finestra.</p>
<h1>2. Inseriamo le variabili necessarie</h1>
<p>Spostatevi, ora, nella cartella &#8220;Resources&#8221; ed aprite il file &#8220;xxx-Info.plist&#8221; che trovate al suo interno (dove xxx è il nome del vostro progetto).</p>
<p>Utilizzando il &#8220;+&#8221; che appare di fianco alle voci già presenti, inserite due nuovi valori, rispettivamente chiamati &#8220;<em>CFBuildDate</em>&#8221; e &#8220;<em>CFBuildNumber</em>&#8220;. Non c&#8217;è bisogno che inseriate dei valori per queste due voci, in quanto verranno create automaticamente dallo script. Ecco come deve essere il vostro file &#8220;.plist&#8221;:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-21.26.45.png"><img class="alignnone size-large wp-image-4798" title="Schermata 2010-03-15 a 21.26.45" src="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-21.26.45-500x327.png" alt="" width="500" height="327" /></a></p>
<p>Potete notare che è già presente la stringa &#8220;<em>Bundle version</em>&#8220;, che identifica la versione della nostra applicazione. Sarà anche questo un valore che andremo a leggere. Salvate il file e chiudetelo pure.</p>
<h1>3. Inseriamo il codice necessario</h1>
<p>Non ci resta che inserire quelle poche istruzioni che ci permetteranno di leggere il numero di versione, il numero di build e la data dell&#8217;ultima build. Inserite, dove vi serve, il seguente codice:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span>versione <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSBundle</span> mainBundle<span style="color: #002200;">&#93;</span> infoDictionary<span style="color: #002200;">&#93;</span> objectForKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBundleVersion&quot;</span><span style="color: #002200;">&#93;</span>;
<span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span>build <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSBundle</span> mainBundle<span style="color: #002200;">&#93;</span> infoDictionary<span style="color: #002200;">&#93;</span> objectForKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBuildNumber&quot;</span><span style="color: #002200;">&#93;</span>;
<span style="color: #400080;">NSString</span> <span style="color: #002200;">*</span>data <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSBundle</span> mainBundle<span style="color: #002200;">&#93;</span> infoDictionary<span style="color: #002200;">&#93;</span> objectForKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;CFBuildDate&quot;</span><span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<p>Come vedete abbiamo ottenuto tre stringhe con i rispettivi tre valori, che potrete utilizzare a vostro piacimento!</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-22.01.16.png"><img class="alignnone size-full wp-image-4802" title="Schermata 2010-03-15 a 22.01.16" src="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-22.01.16.png" alt="" width="414" height="770" /></a></p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2010/03/AutoBuildExample.zip"><img src="http://www.bubidevs.net/Immagini/download_icon.png" alt="" width="33" height="40" align="middle" /></a> Se Avete Problemi, questo è il <a href="http://www.bubidevs.net/wp-content/uploads/2010/03/AutoBuildExample.zip">nostro file di progetto</a>.</p>
<p style="text-align: left;"><strong><span style="color: #ff0000;">Nota:</span></strong> per visualizzare lo script inserito espandete l&#8217;elemento &#8220;<em>Targets</em>&#8221; del progetto e fate doppio clic su &#8220;<em>Run Script</em>&#8220;.</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-22.11.08.png"><img class="alignnone size-full wp-image-4804" title="Schermata 2010-03-15 a 22.11.08" src="http://www.bubidevs.net/wp-content/uploads/2010/03/Schermata-2010-03-15-a-22.11.08.png" alt="" width="226" height="106" /></a></p>
<p style="text-align: left;"><em>La guida è stata creata da Andrea Busi per “<a style="color: #3362fb; text-decoration: none;" href="http://www.bubidevs.net/2010/03/13/2010/02/09/2009/09/25/2009/08/08/2009/07/04/">Bubi Devs</a>”, prendendo spunto da questa guida: &#8220;<a href="http://imthi.com/blog/programming/auto-increment-build-number-date-in-xcode-iphone-project.php">Auto Increment Build Number &amp; Date in XCode iPhone Project</a>&#8220;. I meriti, quindi, sono del legittimo autore.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bubidevs.net/2010/03/23/devtutorial-27-incremento-automatico-del-numero-di-build-e-data-in-un-progetto/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>DevTutorial #26 &#8211; Creiamo il nostro &#8220;Brushes&#8221; personale! (parte 2)</title>
		<link>http://www.bubidevs.net/2010/03/13/devtutorial-26-creiamo-il-nostro-brushes-personale-parte-2/</link>
		<comments>http://www.bubidevs.net/2010/03/13/devtutorial-26-creiamo-il-nostro-brushes-personale-parte-2/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 06:00:04 +0000</pubDate>
		<dc:creator>Andrea Busi</dc:creator>
				<category><![CDATA[DevTutorial]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[brushes]]></category>
		<category><![CDATA[CoreGraphics]]></category>
		<category><![CDATA[disegnare]]></category>
		<category><![CDATA[draw]]></category>
		<category><![CDATA[grafica]]></category>
		<category><![CDATA[imageSavedToPhotosAlbum]]></category>
		<category><![CDATA[immagini]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[UIAlertView]]></category>
		<category><![CDATA[UIImageWriteToSavedPhotosAlbum]]></category>

		<guid isPermaLink="false">http://www.bubidevs.net/?p=4619</guid>
		<description><![CDATA[Nella prima parte del tutorial abbiamo visto come creare la struttura di base del nostro &#8220;Brushes&#8221;, inoltre abbiamo fatto in modo che l&#8217;utente possa disegnare all&#8217;interno dell&#8217;applicazione. In questa seconda parte aggiungeremo alcuni aspetti fondamentali per migliorare l&#8217;applicazione: la possibilità di cambiare la dimensione e il colore del pennello, e la possibilità di salvare i...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.bubidevs.net/iphone-sdk/devtutorial/"><img class="alignnone" src="http://www.bubidevs.net/Immagini/Logo-DevTutorial.png" alt="" width="490" height="200" /></a></p>
<p>Nella prima parte del tutorial abbiamo visto come creare la struttura di base del nostro &#8220;Brushes&#8221;, inoltre abbiamo fatto in modo che l&#8217;utente possa disegnare all&#8217;interno dell&#8217;applicazione.</p>
<p>In questa seconda parte aggiungeremo alcuni aspetti fondamentali per migliorare l&#8217;applicazione: la possibilità di cambiare la dimensione e il colore del pennello, e la possibilità di salvare i disegni.</p>
<p>Vedremo, quindi, come due classi diverse possano comunicare tra loro, e come utilizzare il metodo &#8220;imageSavedToPhotosAlbum&#8221; che permette di salvare delle immagini nella galleria dell&#8217;utente.</p>
<p>Buon tutorial a tutti!</p>
<p><span id="more-4619"></span></p>
<h3 style="text-align: center;"><em><a href="http://www.devapp.it/wordpress/t060-creiamo-unapplicazione-per-iphone-in-stile-brushes-parte-2.html">Leggi il tutorial completo su devAPP</a></em></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.bubidevs.net/2010/03/13/devtutorial-26-creiamo-il-nostro-brushes-personale-parte-2/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>DevTutorial #25 &#8211; Creiamo il nostro &#8220;Brushes&#8221; personale! (parte 1)</title>
		<link>http://www.bubidevs.net/2010/03/05/devtutorial-25-creiamo-il-nostro-brushes-personale-parte-1/</link>
		<comments>http://www.bubidevs.net/2010/03/05/devtutorial-25-creiamo-il-nostro-brushes-personale-parte-1/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 06:00:44 +0000</pubDate>
		<dc:creator>Andrea Busi</dc:creator>
				<category><![CDATA[DevTutorial]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[brushes]]></category>
		<category><![CDATA[CGPoint]]></category>
		<category><![CDATA[CoreGraphics]]></category>
		<category><![CDATA[disegnare]]></category>
		<category><![CDATA[draw]]></category>
		<category><![CDATA[grafica]]></category>
		<category><![CDATA[touchesBegan]]></category>
		<category><![CDATA[touchesEnded]]></category>
		<category><![CDATA[touchesMoved]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[UIColor]]></category>
		<category><![CDATA[UIImageView]]></category>

		<guid isPermaLink="false">http://www.bubidevs.net/?p=4570</guid>
		<description><![CDATA[Rieccoci con una nuova serie di tutorial! Quello che ho pensato per voi questa volta è un po&#8217; particolare, ma secondo me molto carino e con molte cose utili. Sicuramente tutti voi conoscerete Brushes (link iTunes), un programma molto famoso per disegnare sul proprio iPhone e iPod Touch. Ho pensato, quindi, di spiegarvi come realizzarne...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.bubidevs.net/iphone-sdk/devtutorial/"><img class="alignnone" src="http://www.bubidevs.net/Immagini/Logo-DevTutorial.png" alt="" width="490" height="200" /></a></p>
<p>Rieccoci con una nuova serie di tutorial!</p>
<p>Quello che ho pensato  per voi questa volta è un po&#8217; particolare, ma secondo me molto carino e  con molte cose utili. Sicuramente tutti voi conoscerete <strong>Brushes</strong> (<a href="http://itunes.apple.com/it/app/brushes/id288230264?mt=8">link  iTunes</a>), un programma molto famoso per disegnare sul proprio iPhone e  iPod Touch.</p>
<p>Ho pensato, quindi, di spiegarvi come realizzarne uno tutto vostro! In questa prima parte vedremo come fare in modo che l&#8217;utente possa, muovendo il dito sullo schermo, disegnare a suo piacimento.</p>
<p>Ovviamente in questa prima parte ci occuperemo solo di questo aspetto. Nel prossimo tutorial vedremo, poi, come rendere possibile la definizione di un pennello personale, con dimensione e colore a scelta.</p>
<p>Ora, però, concentriamoci sulla prima parte. Buon tutorial a tutti!</p>
<p><span id="more-4570"></span></p>
<h3 style="text-align: center;"><em><a href="http://www.devapp.it/wordpress/t059-creiamo-unapplicazione-per-iphone-in-stile-brushes.html">Leggi il tutorial completo su devAPP</a></em></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.bubidevs.net/2010/03/05/devtutorial-25-creiamo-il-nostro-brushes-personale-parte-1/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>DevTutorial # 24 &#8211; Controllare le connessioni disponibili</title>
		<link>http://www.bubidevs.net/2010/02/23/devtutorial-24-controllare-le-connessioni-disponibili/</link>
		<comments>http://www.bubidevs.net/2010/02/23/devtutorial-24-controllare-le-connessioni-disponibili/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 09:00:34 +0000</pubDate>
		<dc:creator>Andrea Busi</dc:creator>
				<category><![CDATA[DevTutorial]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[3G]]></category>
		<category><![CDATA[connessioni]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Reachibility]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WiFi]]></category>

		<guid isPermaLink="false">http://www.bubidevs.net/?p=4477</guid>
		<description><![CDATA[Eccoci con un nuovo tutorial dedicato alla programmazione per iPhone SDK. In questo appuntamento vedremo come controllare le connessioni disponibili nel nostro dispositivo, operazione molto importante in tutte le applicazioni che devono accedere, per qualsiasi motivo, alla rete. Vedremo come utilizzare la classe &#8220;Reachability&#8221; (messa a disposizione da Apple), per testare se è attiva una...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.bubidevs.net/iphone-sdk/devtutorial/"><img class="alignnone" src="http://www.bubidevs.net/Immagini/Logo-DevTutorial.png" alt="" width="490" height="200" /></a></p>
<p>Eccoci con un nuovo tutorial dedicato alla programmazione per iPhone SDK.</p>
<p>In questo appuntamento vedremo come controllare le connessioni disponibili nel nostro dispositivo, operazione molto importante in tutte le applicazioni che devono accedere, per qualsiasi motivo, alla rete.</p>
<p>Vedremo come utilizzare la classe &#8220;<strong>Reachability</strong>&#8221; (messa a disposizione da Apple), per testare se è attiva una connessione WiFi o 3G. Piccola nota, in questo tutorial parleremo sempre di connessione 3G, sarebbe più corretto parlare di connessione dati (potrebbe essere anche una semplice connessione EDGE), ma per semplicità utilizzeremo sempre la dicitura 3G.</p>
<p>Buon tutorial a tutti allora!</p>
<p><span id="more-4477"></span></p>
<h3 style="text-align: center;"><em><a href="http://www.devapp.it/wordpress/t070-controllare-le-connessioni-disponibili-nelle-nostre-applicazioni-iphone.html">Leggi il tutorial completo su devAPP</a></em></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.bubidevs.net/2010/02/23/devtutorial-24-controllare-le-connessioni-disponibili/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>DevTutorial #23 – Creiamo il nostro client per Twitter! (Parte 3)</title>
		<link>http://www.bubidevs.net/2010/02/09/devtutorial-23-%e2%80%93-creiamo-il-nostro-client-per-twitter-parte-3/</link>
		<comments>http://www.bubidevs.net/2010/02/09/devtutorial-23-%e2%80%93-creiamo-il-nostro-client-per-twitter-parte-3/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 10:30:41 +0000</pubDate>
		<dc:creator>Andrea Busi</dc:creator>
				<category><![CDATA[DevTutorial]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[dati]]></category>
		<category><![CDATA[MGTwitterEngine]]></category>
		<category><![CDATA[NSUserDefault]]></category>
		<category><![CDATA[salvataggio]]></category>
		<category><![CDATA[standardUserDefaults]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.bubidevs.net/?p=3974</guid>
		<description><![CDATA[Eccoci giunti con l&#8217;ultimo appuntamento dei DevTutorial dedicato alla realizzazione di un semplice client per Twitter. Vi ricordo che trovate qui la prima parte, metre qui la seconda. In questa terza parte vedremo come utilizzare la classe NSUserDefault, che ci permette di salvare delle informazioni relative alla nostra applicazione. Quello che andremo a salvare sarà...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="alignnone" src="http://www.bubidevs.net/wp-content/uploads/2010/01/Logo-DevTutorial_twitter.png" alt="" width="490" height="200" /></p>
<p>Eccoci giunti con l&#8217;ultimo appuntamento dei DevTutorial dedicato alla realizzazione di un semplice client per Twitter. Vi ricordo che trovate <a href="http://www.bubidevs.net/2010/01/22/devtutorial-21-creiamo-il-nostro-client-per-twitter-parte-1/">qui</a> la prima parte, metre <a href="http://www.bubidevs.net/2010/02/02/devtutorial-22-creiamo-il-nostro-client-per-twitter-parte-2/">qui</a> la seconda.</p>
<p>In questa terza parte vedremo come utilizzare la classe <strong>NSUserDefault</strong>, che ci permette di salvare delle informazioni relative alla nostra applicazione. Quello che andremo a salvare sarà la data in cui è stato eseguito l&#8217;ultimo refresh, che mostreremo all&#8217;avvio all&#8217;utente.</p>
<p>Ovviamente questa è una semplificazione, in applicazioni più complesse potremmo avere molte più informazioni da memorizzare (ad esempio dei settaggi come l&#8217;autorefresh, il nome utente o la password).</p>
<p>Prendiamo, quindi, in esame solo il salvataggio di un parametro, ma vedrete che non sarà nulla di difficile!<br />
<span id="more-3974"></span></p>
<h3 style="text-align: center;"><em><a href="http://www.devapp.it/wordpress/t052-creiamo-un-client-twitter-per-iphone-parte-3.html">Leggi il tutorial completo su devAPP</a></em></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.bubidevs.net/2010/02/09/devtutorial-23-%e2%80%93-creiamo-il-nostro-client-per-twitter-parte-3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>DevTutorial #22 &#8211; Creiamo il nostro client per Twitter! (Parte 2)</title>
		<link>http://www.bubidevs.net/2010/02/02/devtutorial-22-creiamo-il-nostro-client-per-twitter-parte-2/</link>
		<comments>http://www.bubidevs.net/2010/02/02/devtutorial-22-creiamo-il-nostro-client-per-twitter-parte-2/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 09:00:59 +0000</pubDate>
		<dc:creator>Andrea Busi</dc:creator>
				<category><![CDATA[DevTutorial]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[cell]]></category>
		<category><![CDATA[celle personalizzate]]></category>
		<category><![CDATA[MGTwitterEngine]]></category>
		<category><![CDATA[Phone SDK]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[UITableView]]></category>
		<category><![CDATA[UITableViewCell]]></category>
		<category><![CDATA[viewWithTag]]></category>

		<guid isPermaLink="false">http://www.bubidevs.net/?p=3861</guid>
		<description><![CDATA[Nella prima parte di questo tutorial abbiamo visto come aggiungere la libreria MGTwitterEngine e come leggere la nostra timeline di Twitter. In questo secondo appuntamento vedremo, invece, come creare una tabella personalizzata, che dovrà visualizzare gli elementi Tweet che abbiamo salvato nella lista. Utilizzeremo, quindi,  la classe UITableViewCell per creare delle celle personalizzate, in modo...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="alignnone size-full wp-image-3857" title="Logo-DevTutorial_twitter" src="http://www.bubidevs.net/wp-content/uploads/2010/01/Logo-DevTutorial_twitter.png" alt="" width="490" height="200" /></p>
<p>Nella <a href="http://www.bubidevs.net/2010/01/22/devtutorial-21-creiamo-il-nostro-client-per-twitter-parte-1/">prima parte</a> di questo tutorial abbiamo visto come aggiungere la libreria MGTwitterEngine e come leggere la nostra timeline di Twitter.</p>
<p>In questo secondo appuntamento vedremo, invece, come creare una tabella personalizzata, che dovrà visualizzare gli elementi Tweet che abbiamo salvato nella lista. Utilizzeremo, quindi,  la classe <strong>UITableViewCell</strong> per creare delle celle personalizzate, in modo da ottenere una tabella con un layout ad-hoc.</p>
<p>Vi ricordo che per seguire questo tutorial è necessario avere a disposizione il codice sorgente della prima parte.</p>
<p>Buon tutorial!<br />
<span id="more-3861"></span></p>
<h3 style="text-align: center;"><em><a href="http://www.devapp.it/wordpress/t050-creiamo-un-client-twitter-per-iphone-parte-2.html">Leggi il tutorial completo su devAPP</a></em></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.bubidevs.net/2010/02/02/devtutorial-22-creiamo-il-nostro-client-per-twitter-parte-2/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>DevTutorial #21 &#8211; Creiamo il nostro client per Twitter! (Parte 1)</title>
		<link>http://www.bubidevs.net/2010/01/22/devtutorial-21-creiamo-il-nostro-client-per-twitter-parte-1/</link>
		<comments>http://www.bubidevs.net/2010/01/22/devtutorial-21-creiamo-il-nostro-client-per-twitter-parte-1/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 06:00:51 +0000</pubDate>
		<dc:creator>Andrea Busi</dc:creator>
				<category><![CDATA[DevTutorial]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[MGTwitterEngine]]></category>
		<category><![CDATA[NSDictionary]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[UIActivityIndicatorView]]></category>

		<guid isPermaLink="false">http://www.bubidevs.net/?p=3622</guid>
		<description><![CDATA[Dopo una lunga attesa, eccoci con una nuova serie di tutorial! Quello che inizieremo a realizzare oggi (e per un altro paio di tutorial successivi) sarà un nostro personalissimo client per Twitter! Vedremo, infatti, come sfruttare il progetto MGTwitterEngine, che ci permetterà di interagire con il nostro account di Twitter. Utilizzeremo, inoltre, degli aspetti più...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.bubidevs.net/iphone-sdk/devtutorial/"><img class="alignnone size-full wp-image-3857" title="Logo-DevTutorial_twitter" src="http://www.bubidevs.net/wp-content/uploads/2010/01/Logo-DevTutorial_twitter.png" alt="" width="490" height="200" /></a></p>
<p>Dopo una lunga attesa, eccoci con una nuova serie di tutorial!</p>
<p>Quello che inizieremo a realizzare oggi (e per un altro paio di tutorial successivi) sarà un nostro personalissimo client per Twitter! Vedremo, infatti, come sfruttare il progetto <strong>MGTwitterEngine</strong>, che ci permetterà di interagire con il nostro account di Twitter. Utilizzeremo, inoltre, degli aspetti più particolari e complessi dell&#8217;iPhone SDK.</p>
<p>Ecco quello che faremo oggi:</p>
<ul>
<li>Inserire la libreria MGTwitterEngine nel nostro progetto e settarla in maniera corretta;</li>
<li>Collegarci, sfruttando tale libreria, alla nostro timeline di Twitter;</li>
<li>Ricavare i vari tweet della timeline e salvarli in una lista con elemento ad-hoc.</li>
</ul>
<p>Già che siamo in tema, vi ricordo che il nostro canale Twitter è raggiungibile a <a href="http://twitter.com/bubidevs">questo indirizzo</a>, vi invito a seguirci se ancora non lo fate! <img src='http://www.bubidevs.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Ora sotto con il codice, buon tutorial a tutti!<br />
<span id="more-3622"></span></p>
<h3 style="text-align: center;"><em><a href="http://www.devapp.it/wordpress/t049-creiamo-un-client-twitter-per-iphone-parte-1.html">Leggi il tutorial completo su devAPP</a></em></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.bubidevs.net/2010/01/22/devtutorial-21-creiamo-il-nostro-client-per-twitter-parte-1/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>DevTutorial #20 &#8211; Come implementare un database SQL</title>
		<link>http://www.bubidevs.net/2009/09/25/devtutorial-20-come-implementare-un-database-sql/</link>
		<comments>http://www.bubidevs.net/2009/09/25/devtutorial-20-come-implementare-un-database-sql/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 15:03:18 +0000</pubDate>
		<dc:creator>Andrea Busi</dc:creator>
				<category><![CDATA[DevTutorial]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[db]]></category>
		<category><![CDATA[NSObject]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[sqlite]]></category>
		<category><![CDATA[statement]]></category>

		<guid isPermaLink="false">http://www.bubidevs.net/?p=2075</guid>
		<description><![CDATA[Eccoci con un nuovo tutorial dedicato alla programmazione per iPhone SDK. Oggi vedremo come implementare un database SQL all&#8217;interno delle nostre applicazioni. Creeremo una tabella in cui andremo ad inserire i valori letti dal nostro database, dopo aver eseguito una query predefinita. Devo premettere, però, che non parlerò di SQL e database relazionali, che devono...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.bubidevs.net/iphone-sdk/devtutorial/"><img class="alignnone" src="http://www.bubidevs.net/Immagini/Logo-DevTutorial.png" alt="" width="490" height="200" /></a></p>
<p>Eccoci con un nuovo tutorial dedicato alla programmazione per iPhone SDK. Oggi vedremo come implementare un database SQL all&#8217;interno delle nostre applicazioni. Creeremo una tabella in cui andremo ad inserire i valori letti dal nostro database, dopo aver eseguito una query predefinita.</p>
<p>Devo premettere, però, che non parlerò di SQL e database relazionali, che devono essere già conosciuti da chi affronta questo tutorial. È una scelta che potrebbe non piacere a molti di voi, però richiederebbe troppo tempo e una trattazione che non può essere fatta in un semplice tutorial. Detto ciò, è possibile seguire il tutorial anche senza conoscere niente di SQL, ovviamente alcune caratteristiche e alcuni passaggi potrebbero risultare di difficile comprensione.</p>
<p><span id="more-2075"></span></p>
<h3 style="text-align: center;"><em><a href="http://www.devapp.it/wordpress/t044-come-implementare-un-database-sqlite-nelle-nostre-applicazioni.html">Leggi il tutorial completo su devAPP</a></em></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.bubidevs.net/2009/09/25/devtutorial-20-come-implementare-un-database-sql/feed/</wfw:commentRss>
		<slash:comments>46</slash:comments>
		</item>
		<item>
		<title>DevTutorial #19 &#8211; AVPlayer: come riprodurre semplicemente file audio!</title>
		<link>http://www.bubidevs.net/2009/08/08/devtutorial-19-avplayer-come-riprodurre-semplicemente-file-audio/</link>
		<comments>http://www.bubidevs.net/2009/08/08/devtutorial-19-avplayer-come-riprodurre-semplicemente-file-audio/#comments</comments>
		<pubDate>Sat, 08 Aug 2009 20:51:10 +0000</pubDate>
		<dc:creator>Andrea Busi</dc:creator>
				<category><![CDATA[DevTutorial]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[AVAudioPlayer]]></category>
		<category><![CDATA[AVAudioPlayerDelegate]]></category>
		<category><![CDATA[AVFoundation]]></category>
		<category><![CDATA[AVPlayer]]></category>
		<category><![CDATA[file audio]]></category>
		<category><![CDATA[player]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.bubidevs.net/?p=1359</guid>
		<description><![CDATA[Con il firmware 2.2 Apple ha introdotto una classe davvero molto importante e potente, che permette di riprodurre una grande varietà di file audio all&#8217;interno delle proprie applicazioni. Tale classe è AVAudioPlayer e in questo tutorial vedremo come utilizzarla, creando un nostro rudimentale player audio. Andremo a realizzare un&#8217;applicazione composta da due pulsanti, uno per...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.bubidevs.net/iphone-sdk/devtutorial/"><img class="alignnone" src="http://www.bubidevs.net/Immagini/Logo-DevTutorial.png" alt="" width="490" height="200" /></a></p>
<p>Con il firmware 2.2 Apple ha introdotto una classe davvero molto importante e potente, che permette di riprodurre una grande varietà di file audio all&#8217;interno delle proprie applicazioni. Tale classe è AVAudioPlayer e in questo tutorial vedremo come utilizzarla, creando un nostro rudimentale player audio.</p>
<p>Andremo a realizzare un&#8217;applicazione composta da due pulsanti, uno per avviare la riproduzione di un file audio, l&#8217;altro per fermare la riproduzione stessa. Il tutto è molto semplice, però potrà darvi gli strumenti necessari per utilizzare questa classe anche nelle vostre applicazioni! Buona programmazione allora!</p>
<p style="text-align: center;"><span id="more-1359"></span></p>
<h1>1. Creiamo un nuovo progetto</h1>
<p>Iniziamo come sempre creando un nuovo progetto di tipo &#8220;View-Based Application&#8221; e chiamiamolo &#8220;AVPlayerTutorial&#8221;.</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2008/10/Immagine-1.png"><img class="alignnone" src="http://www.bubidevs.net/wp-content/uploads/2008/10/Immagine-1-500x368.png" alt="" width="500" height="368" /></a></p>
<p style="text-align: center;">
<p>Iniziamo definendo le due azioni che il nostro player musicale potrà eseguire, ovvero avviare e fermare la riproduzione di un brano. Apriamo, quindi, il file &#8220;AVPlayerTutorialViewController.h&#8221; e definiamo questi due metodi (righe 4 e 5):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@interface</span> AVPlayerTutorialViewController <span style="color: #002200;">:</span> UIViewController  <span style="color: #002200;">&#123;</span>
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span>IBAction<span style="color: #002200;">&#41;</span>avviaSuono;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span>IBAction<span style="color: #002200;">&#41;</span>fermaSuono;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>Salviamo il file appena modificato e andiamo a creare la struttura grafica della nostra applicazione.</p>
<h1>2. Definiamo l&#8217;interfaccia grafica</h1>
<p>Facciamo doppio clic sul file &#8220;AVPlayerTutorialViewController.xib&#8221;, si aprirà Interface Builder in cui andremo a definire l&#8217;interfaccia grafica. Dobbiamo semplicemente inserire due bottoni, uno per avviare la riproduzione (un classico &#8220;Play&#8221;) e uno per fermarla (un &#8220;Pause&#8221;). Ecco come appare la mia applicazione (molto spartana oserei dire <img src='http://www.bubidevs.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ):</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-31.png"><img class="alignnone size-full wp-image-1362" title="Immagine 3" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-31.png" alt="Immagine 3" width="400" height="582" /></a></p>
<p>Ora dobbiamo collegare le due azioni che abbiamo definito in precedenza. Dal Pannello dei Documenti (&#8220;Tools -&gt; Reveal in Document Window&#8221;) selezioniamo il &#8220;File&#8217;s Owner&#8221; e apriamo poi il &#8220;Connections Inspector&#8221;. Colleghiamo l&#8217;azione &#8220;avviaSuono&#8221; con il primo bottone, mentre &#8220;fermaSuono&#8221; con il secondo. Ecco come appare il pannello dopo aver eseguito i collegamenti:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-41.png"><img class="alignnone size-full wp-image-1363" title="Immagine 4" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-41.png" alt="Immagine 4" width="301" height="253" /></a></p>
<p>Abbiamo già terminato con questa parte, possiamo salvare tutto e chiudere Interface Builder.</p>
<h1>3. Definiamo la classe</h1>
<p>Torniamo al file &#8220;AVPlayerTutorialViewController.h&#8221; e completiamo la definizione della classe nella seguente maniera:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &amp;lt;UIKit/UIKit.h&amp;gt;</span>
<span style="color: #6e371a;">#import &amp;lt;AVFoundation/AVFoundation.h&amp;gt;</span>
&nbsp;
<span style="color: #a61390;">@interface</span> AVPlayerTutorialViewController <span style="color: #002200;">:</span> UIViewController <span style="color: #002200;">&amp;</span>lt;AVAudioPlayerDelegate<span style="color: #002200;">&amp;</span>gt; <span style="color: #002200;">&#123;</span>
	AVAudioPlayer <span style="color: #002200;">*</span>player;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span>IBAction<span style="color: #002200;">&#41;</span>avviaSuono;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span>IBAction<span style="color: #002200;">&#41;</span>fermaSuono;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>Abbiamo definito un componente &#8220;player&#8221; (riga 5), che sarà l&#8217;oggetto che si occuperà di leggere il nostro file e di riprodurlo, il tutto in grande semplicità, vista la potenza e la versatilità di questo componente.</p>
<p>Potete notare, inoltre, che abbiamo definito anche il delegato &lt;AVAudioPlayerDelegate&gt; (riga 4), che ci fornirà dei metodi molto importanti.</p>
<p>Prima di definirne le azioni, dobbiamo inserire nel nostro progetto il framework necessario. Espandete la sezione “Targets” nel progetto, e cliccate con il tasto destro su “AVPlayerTutorial”, selezionando poi “Get Info”. Si aprirà una nuova schermata, in cui dobbiamo andare nella sezione “General”. Nell’angolo in basso a sinistra noteremo un bottone “+”, clicchiamo e si aprirà<br />
un elenco di tutti i framework disponibili:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-61.png"><img class="alignnone size-full wp-image-1366" title="Immagine 6" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-61.png" alt="Immagine 6" width="386" height="332" /></a></p>
<p>Selezioniamo “AVFoundation.framework”  e clicchiamo su &#8220;Add&#8221;. Avremo così aggiunto il framework necessario. Possiamo chiudere la schermata delle proprietà e tornare al codice.</p>
<p>Prima di definire le azioni, inserite un file audio nel vostro progetto, semplicemente trascinandolo in XCode. Questo sarà il file che il nostro player andrà a riprodurre.</p>
<h1>4. Definiamo le azioni</h1>
<p>Ora dobbiamo implementare le due azioni, &#8220;avviaSuono&#8221; e &#8220;fermaSuono&#8221; del nostro lettore. Iniziamo inserendo il seguente codice nel file &#8220;AVPlayerTutorialViewController.m&#8221;:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;AVPlayerTutorialViewController.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> AVPlayerTutorialViewController
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span>IBAction<span style="color: #002200;">&#41;</span>avviaSuono<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span><span style="color: #002200;">!</span>player<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#123;</span><span style="color: #11740a; font-style: italic;">//il file non è già avviato</span>
		<span style="color: #11740a; font-style: italic;">// Ricaviamo il percorso del file da riprodurre</span>
		<span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> resourcePath <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSBundle</span> mainBundle<span style="color: #002200;">&#93;</span> resourcePath<span style="color: #002200;">&#93;</span>;
		resourcePath <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>resourcePath stringByAppendingString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;/billie.mp3&quot;</span><span style="color: #002200;">&#93;</span>;
		<span style="color: #400080;">NSError</span><span style="color: #002200;">*</span> err;
		<span style="color: #11740a; font-style: italic;">// Inizializziamo il player con il percorso del file</span>
		player <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>AVAudioPlayer alloc<span style="color: #002200;">&#93;</span> initWithContentsOfURL<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSURL</span> fileURLWithPath<span style="color: #002200;">:</span>resourcePath<span style="color: #002200;">&#93;</span> error<span style="color: #002200;">:&amp;</span>amp;err<span style="color: #002200;">&#93;</span>;
&nbsp;
		<span style="color: #a61390;">if</span><span style="color: #002200;">&#40;</span>err<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#123;</span><span style="color: #11740a; font-style: italic;">//c'è stato un errore</span>
			NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Errore: %@&quot;</span>, <span style="color: #002200;">&#91;</span>err localizedDescription<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
		<span style="color: #002200;">&#125;</span>
		<span style="color: #a61390;">else</span><span style="color: #002200;">&#123;</span><span style="color: #11740a; font-style: italic;">//tutto ok, riproduciamo il file</span>
			player.delegate <span style="color: #002200;">=</span> self;
			<span style="color: #002200;">&#91;</span>player play<span style="color: #002200;">&#93;</span>;
		<span style="color: #002200;">&#125;</span>
&nbsp;
	<span style="color: #002200;">&#125;</span>
	<span style="color: #a61390;">else</span><span style="color: #002200;">&#123;</span><span style="color: #11740a; font-style: italic;">//il file è già in esecuzione oppure si riprende ad eseguirlo</span>
		NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Riavvio riproduzione!&quot;</span><span style="color: #002200;">&#41;</span>;
		<span style="color: #002200;">&#91;</span>player stop<span style="color: #002200;">&#93;</span>;
		player <span style="color: #002200;">=</span> <span style="color: #a61390;">nil</span>;
		<span style="color: #002200;">&#91;</span>self avviaSuono<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span>IBAction<span style="color: #002200;">&#41;</span>fermaSuono<span style="color: #002200;">&#123;</span>
	NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Player fermato!&quot;</span><span style="color: #002200;">&#41;</span>;
	<span style="color: #002200;">&#91;</span>player pause<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p style="text-align: center;">
<p>Analizziamo il codice appena scritto, iniziando dal metodo &#8220;avviaSuono&#8221; (riga 5). Troviamo subito un &#8220;if&#8221;, che controlla se il file non è già stato avviato: in tal caso esegue delle istruzioni che andremo poi ad esaminare, altimenti chiama il metodo play della classe AVAudioPlayer (che riproduce appunto il file audio).<br />
All&#8217;interno del ciclo if, troviamo la dichiarazione e l&#8217;inizializzazione del file da riprodurre: con le prime due istruzioni ricaviamo il percorso del nostro file (che ovviamente deve essere inserito all&#8217;interno del nostro progetto), poi inizializziamo l&#8217;oggetto &#8220;player&#8221;. Prima di poterlo riprodurre, testiamo la variabile &#8220;err&#8221;, che ci riporta eventuali errori nella fase di inizializzazione (ad esempio relativo al file audio non trovato). Se non c&#8217;è stato nessun errore, viene riprodotto il file tramite l&#8217;istruzione [player play].</p>
<p>Il secondo metodo, &#8220;fermaSuono&#8221;, si occupa di mettere in pausa la riproduzione del file, richiamando il metodo &#8220;pause&#8221; sempre dell&#8217;oggetto &#8220;player&#8221;.</p>
<p>Ora non ci resta che implementare alcuni metodi richiesti dal delegato &#8220;AVAudioPlayerDelegate&#8221;. Ecco il codice da inserire:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>audioPlayerDidFinishPlaying<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>AVAudioPlayer <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>aplayer successfully<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">BOOL</span><span style="color: #002200;">&#41;</span>flag <span style="color: #002200;">&#123;</span>
	<span style="color: #002200;">&#91;</span>player autorelease<span style="color: #002200;">&#93;</span>;
	player <span style="color: #002200;">=</span> <span style="color: #a61390;">nil</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>audioPlayerDecodeErrorDidOccur<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>AVAudioPlayer <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>player error<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSError</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>error <span style="color: #002200;">&#123;</span>
	NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Errore nel decodificare: %@&quot;</span>, <span style="color: #002200;">&#91;</span>error localizedDescription<span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>audioPlayerBeginInterruption<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>AVAudioPlayer <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>player <span style="color: #002200;">&#123;</span>
	NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Interrotto!&quot;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>audioPlayerEndInterruption<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>AVAudioPlayer <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>player <span style="color: #002200;">&#123;</span>
	NSLog<span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Fine dell'interruzione!&quot;</span><span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Questi metodi servono per sapere quando la riproduzione viene interrotta oppure per comunicare eventuali errori nella decodifica del file.</p>
<p>Clicchiamo ora su &#8220;Build and Go!&#8221; e testiamo il nostro personalissimo player audio!!</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-9.png"><img class="alignnone size-full wp-image-1371" title="Immagine 9" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-9.png" alt="Immagine 9" width="414" height="770" /></a></p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/AVPlayerTutorial.zip"><img src="http://www.bubidevs.net/Immagini/download_icon.png" alt="" width="33" height="40" align="middle" /></a> Se Avete Problemi, questo è il <a href="http://www.bubidevs.net/wp-content/uploads/2009/07/AVPlayerTutorial.zip">nostro file di progetto</a>.</p>
<p style="text-align: right;"><em>La guida è stata creata da Andrea Busi per “<a href="../2009/07/04/">Bubi Devs</a>”, prendendo spunto da questo guida: “<a href="http://9mmedia.com/blog/?p=308">Playing Audio Files using the iPhone SDK</a>&#8220;. I meriti, quindi, sono del legittimo autore.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bubidevs.net/2009/08/08/devtutorial-19-avplayer-come-riprodurre-semplicemente-file-audio/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>DevTutorial #18 &#8211; TabBar Application, parte 2: inseriamo una NavigationBar</title>
		<link>http://www.bubidevs.net/2009/07/11/devtutorial-18-tabbar-application-parte-2/</link>
		<comments>http://www.bubidevs.net/2009/07/11/devtutorial-18-tabbar-application-parte-2/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 09:55:35 +0000</pubDate>
		<dc:creator>Andrea Busi</dc:creator>
				<category><![CDATA[DevTutorial]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[detail]]></category>
		<category><![CDATA[navigationController]]></category>
		<category><![CDATA[pushViewController]]></category>
		<category><![CDATA[TabBar]]></category>
		<category><![CDATA[TabBar Application]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[UINavigation]]></category>
		<category><![CDATA[UINavigationBar]]></category>
		<category><![CDATA[UITabBar]]></category>
		<category><![CDATA[UIViewController]]></category>
		<category><![CDATA[vista]]></category>
		<category><![CDATA[viste]]></category>
		<category><![CDATA[xib]]></category>

		<guid isPermaLink="false">http://www.bubidevs.net/?p=1378</guid>
		<description><![CDATA[Eccoci con il secondo tutorial dedicato alle TabBar. Nella prima lezione abbiamo visto come creare una struttura generale, composta da due sezioni. Oggi vedremo, invece, come inserire una UINavigationBar all&#8217;interno di una nuova sezione, e gestire il movimento tra le varie celle di una tabella. Ovvero, quando l&#8217;utente seleziona una determinata cella si aprirà una...]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.bubidevs.net/iphone-sdk/devtutorial/"><img class="alignnone" src="http://www.bubidevs.net/Immagini/Logo-DevTutorial.png" alt="" width="490" height="200" /></a></p>
<p>Eccoci con il secondo tutorial dedicato alle TabBar. Nella <a href="http://www.bubidevs.net/2009/07/04/devtutorial-17-tabbar-application-parte-1/">prima lezione</a> abbiamo visto come creare una struttura generale, composta da due sezioni. Oggi vedremo, invece, come inserire una UINavigationBar all&#8217;interno di una nuova sezione, e gestire il movimento tra le varie celle di una tabella. Ovvero, quando l&#8217;utente seleziona una determinata cella si aprirà una corrispondente vista che avremo definito con Interface Builder. La navigation bar, poi, ci permetterà di tornare alla tabella principale. Un po&#8217; come avviene nel menù &#8220;Impostazioni&#8221; del&#8217;iPhone / iPod Touch!</p>
<p>Buon tutorial a tutti!</p>
<p style="text-align: center;"><span id="more-1378"></span></p>
<h1>1. Creiamo un nuovo elemento per la TabBar</h1>
<p>Iniziamo creando la classe che gestirà la nuova vista. Dal menù &#8220;File&#8221; scegliamo &#8220;New File&#8230;&#8221;, nel pannello che apparirà selezioniamo &#8220;UIViewController subclass&#8221; e chiamiamo questa nuova classe &#8220;TabellaController&#8221;.</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-12.png"><img class="alignnone size-large wp-image-1379" title="Immagine 1" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-12-500x368.png" alt="Immagine 1" width="500" height="368" /></a></p>
<p>Abbiamo già imparato a gestire una tabella in <a href="http://www.bubidevs.net/2009/02/02/devtutorial-9-come-creare-una-tabella-parte-i/">questa serie di tutorial</a>, quindi non rispiegherò il codice utilizzato. Riutilizziamo gli stessi metodi, quindi inserite nel file &#8220;TabellaController.h&#8221; il seguente codice:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #a61390;">@interface</span> TabellaController <span style="color: #002200;">:</span> UITableViewController <span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">//array che conterrà gli elementi da visualizzare nella tabella</span>
	<span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span>lista;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@property</span> <span style="color: #002200;">&#40;</span>nonatomic, retain<span style="color: #002200;">&#41;</span> <span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span>lista;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>Mentre in &#8220;TabellaController.m&#8221; inserite questi metodi:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;TabellaController.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> TabellaController
&nbsp;
<span style="color: #a61390;">@synthesize</span> lista;
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>awakeFromNib<span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">// creiamo la lista e inseriamo una serie di elementi da visualizzare nella nostra tabella</span>
	lista <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSArray</span> alloc<span style="color: #002200;">&#93;</span> initWithObjects<span style="color: #002200;">:</span>	<span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;iPhone&quot;</span>, <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;iPod&quot;</span>, <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;iPod Touch&quot;</span>, <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;iMac&quot;</span>, <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;iBook&quot;</span>,
			 <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;MacBook&quot;</span>, <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;MacBook Pro&quot;</span>, <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Mac Pro&quot;</span>, <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;PowerBook&quot;</span>, <span style="color: #a61390;">nil</span><span style="color: #002200;">&#93;</span>;
&nbsp;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">//setta il numero di sezioni della tabella</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>NSInteger<span style="color: #002200;">&#41;</span>numberOfSectionsInTableView<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UITableView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>tableView<span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">return</span> <span style="color: #2400d9;">1</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">//setta il numero di righe della tabella</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>NSInteger<span style="color: #002200;">&#41;</span>tableView<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UITableView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>tableView numberOfRowsInSection<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>NSInteger<span style="color: #002200;">&#41;</span>section<span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">//il numero di righe deve corrispondere al numero di elementi della lista</span>
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span>lista count<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">//settiamo il contenuto delle varie celle</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UITableViewCell <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>tableView<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UITableView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>tableView cellForRowAtIndexPath<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSIndexPath</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>indexPath<span style="color: #002200;">&#123;</span>
&nbsp;
	UITableViewCell <span style="color: #002200;">*</span>cell <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>tableView dequeueReusableCellWithIdentifier<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;cellID&quot;</span><span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>cell <span style="color: #002200;">==</span> <span style="color: #a61390;">nil</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#123;</span>
		cell <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>UITableViewCell alloc<span style="color: #002200;">&#93;</span> initWithFrame<span style="color: #002200;">:</span>CGRectZero reuseIdentifier<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;cellID&quot;</span><span style="color: #002200;">&#93;</span> autorelease<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #002200;">&#125;</span>
&nbsp;
	<span style="color: #11740a; font-style: italic;">//inseriamo nella cello l'elemento della lista corrispondente</span>
	cell.textLabel.text <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>lista objectAtIndex<span style="color: #002200;">:</span>indexPath.row<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #a61390;">return</span> cell;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Insomma, la classica gestione delle UITableView</p>
<p>Salviamo entrambi i file e riapriamo &#8220;MainWindow.xib&#8221; per tornare in Interface Builder.</p>
<h1>2. Definiamo l&#8217;aspetto del nuovo elemento</h1>
<p>Dalla Libreria prendiamo un componente UINavigationController e inseriamolo nella tab bar, proprio come abbiamo fatto nello scorso tutorial per le due viste.</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-42.png"><img class="alignnone size-large wp-image-1383" title="Immagine 4" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-42-500x352.png" alt="Immagine 4" width="500" height="352" /></a></p>
<p>Proprio come abbiamo fatto in precedenza cambiamo il nome della scheda in &#8220;Tabella&#8221;. Ecco il risultato finale:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-52.png"><img class="alignnone size-full wp-image-1386" title="Immagine 5" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-52.png" alt="Immagine 5" width="400" height="582" /></a></p>
<p style="text-align: center;">
<p>Ora non ci resta che inserire la tabella all&#8217;interno di questa vista. Dalla Libreria prediamo un componente UITableViewController e inseriamolo nella nostra vista. Il risultato che dovete ottenere è il seguente:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-62.png"><img class="alignnone size-full wp-image-1385" title="Immagine 6" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-62.png" alt="Immagine 6" width="400" height="582" /></a></p>
<p>Ora dobbiamo solo collegare la classe alla tabella appena inserita. Dal Pannello dei Documenti (&#8220;Tools -&gt; Reveal in Document Window&#8221;) navighiamo fino al seguente percorso:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-72.png"><img class="alignnone size-full wp-image-1392" title="Immagine 7" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-72.png" alt="Immagine 7" width="494" height="411" /></a></p>
<p>Come mostrato in figura, selezioniamo il componente &#8220;Table View Controller&#8221; (che non è altro che la nostra tabella) e apriamo l&#8217;&#8221;Identity Inspector&#8221;. Dal menù Class scegliamo &#8220;TabellaController&#8221;:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-81.png"><img class="alignnone size-full wp-image-1393" title="Immagine 8" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-81.png" alt="Immagine 8" width="301" height="244" /></a></p>
<p>Abbiamo così concluso con la creazione della nostra tabella. Salviamo tutto, torniamo in XCode e clicchiamo su &#8220;Build and Go!&#8221;: la tabella sarà ora presente e funzionante nell&#8217;applicazione!</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-91.png"><img class="alignnone size-full wp-image-1394" title="Immagine 9" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-91.png" alt="Immagine 9" width="414" height="770" /></a></p>
<h1>3. Implementiamo due viste di dettaglio</h1>
<p>Ora vediamo di analizzare un aspetto che molti utenti mi hanno chiesto via mail. Se noi volessimo associare un determinato file &#8220;xib&#8221; (ovvero creato con Interface Builder) ad una cella, come potremmo fare? In questa seconda parte del tutorial vedremo proprio di analizzare i passaggi necessari. Andremo a definire due viste, una che conterrà una foto dell&#8217;elemento &#8220;iPhone&#8221;, mentre un&#8217;altra che avviserà l&#8217;utente dell&#8217;assenza di informazioni per un determinato prodotto. Ovviamente potreste realizzare una vista con i dettagli per ogni prodotto presente nella tabella, ma il meccanismo rimane invariato.</p>
<p>Iniziamo creando due nuovi file xib, dal menù &#8220;File -&gt; New File&#8230;&#8221; e scegliendo &#8220;Empty XIB&#8221;. Io ho chiamato il primo file &#8220;iPhoneDetail&#8221; e il secondo &#8220;OtherDetail&#8221;, ma nulla vieta di chiamarli in modo diverso!</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-10.png"><img class="alignnone size-full wp-image-1395" title="Immagine 10" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-10.png" alt="Immagine 10" width="217" height="123" /></a></p>
<p>Procediamo proprio come abbiamo fatto all&#8217;inizio dello scorso tutorial per le viste &#8220;PrimaVista&#8221; e &#8220;Seconda Vista&#8221;, quindi definiamo subito via codice le due classi necessarie.<br />
Andiamo, quindi, in “File -&gt; New File…” e spostiamoci nella sezione “Cocoa Touch Class”, in cui selezioniamo il modello “UIViewController”: anche in questo caso dobbiamo creare due classi, chiamate “iPhoneDetailController” e “OtheDetailController”.</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-112.png"><img class="alignnone size-large wp-image-1403" title="Immagine 11" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-112-500x368.png" alt="Immagine 11" width="500" height="368" /></a></p>
<p style="text-align: left;">Possiamo spostare i file appena creati nella sezione “Classes” del nostro progetto, per avere un risultato come questo:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-122.png"><img class="alignnone size-full wp-image-1413" title="Immagine 12" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-122.png" alt="Immagine 12" width="198" height="75" /></a></p>
<p>Ora siamo pronti per definire l&#8217;aspetto di queste due nuove viste.</p>
<h1>4. Definiamo l&#8217;aspetto grafico delle due viste di dettaglio</h1>
<p>Apriamo il file &#8220;iPhoneDetail.xib&#8221; in Interface Builder. Il procedimento è, come già detto, uguale a quello svolto per la definizione delle due viste &#8220;PrimaVista&#8221; e &#8220;SecondaVista&#8221;. Inseriamo, quindi, un componente UIView nel Pannello dei Documenti e modifichiamolo a nostro piacimento. Ecco come risulta essere la mia vista:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-111.png"><img class="alignnone size-full wp-image-1396" title="Immagine 11" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-111.png" alt="Immagine 11" width="400" height="582" /></a></p>
<p>Ora associamo questa vista alla sua classe. Dal Pannello dei Documenti selezioniamo il &#8220;File&#8217;s Owner&#8221; e nell&#8217;&#8221;Identity Inspector&#8221; selezioniamo &#8220;iPhoneDetailController&#8221; come classe:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-121.png"><img class="alignnone size-full wp-image-1397" title="Immagine 12" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-121.png" alt="Immagine 12" width="301" height="273" /></a></p>
<p>Andiamo poi in “Connections Inspector” e colleghiamo l’elemento “view” con la vista che abbiamo appena creato (quella contenente le due label per intenderci). Se abbiamo eseguito il passaggio in maniera corretta avremo questo risultato:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-152.png"><img class="alignnone size-full wp-image-1405" title="Immagine 15" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-152.png" alt="Immagine 15" width="301" height="165" /></a></p>
<p>Abbiamo così completato la definizione della vista. Eseguiamo lo stesso procedimento anche per il file “OtherDetail.xib”, collegandola però alla classe “OtherDetailController”. Ecco come appare tale vista:</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-162.png"><img class="alignnone size-full wp-image-1406" title="Immagine 16" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-162.png" alt="Immagine 16" width="400" height="582" /></a></p>
<p>Possiamo salvare tutto e chiudere Interface Builder.</p>
<h1>5. Come richiamare le due viste via codice</h1>
<p>Ora non ci resta che analizzare il codice che ci permette di aprire queste due viste. Apriamo il file &#8220;TabellaController.h&#8221; e modifichiamolo nella seguente maniera:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &amp;lt;UIKit/UIKit.h&amp;gt;</span>
<span style="color: #6e371a;">#import &quot;iPhoneDetailController.h&quot;</span>
<span style="color: #6e371a;">#import &quot;OtherDetailController.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@interface</span> TabellaController <span style="color: #002200;">:</span> UITableViewController <span style="color: #002200;">&#123;</span>
	<span style="color: #11740a; font-style: italic;">//array che conterrà gli elementi da visualizzare nella tabella</span>
	<span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span>lista;
&nbsp;
	<span style="color: #11740a; font-style: italic;">//controller della vista che dovrà essere aperta</span>
	UIViewController <span style="color: #002200;">*</span>detail;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #a61390;">@property</span> <span style="color: #002200;">&#40;</span>nonatomic, retain<span style="color: #002200;">&#41;</span> <span style="color: #400080;">NSArray</span> <span style="color: #002200;">*</span>lista;
&nbsp;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>Abbiamo per prima cosa importato le due classi delle viste (righe 2 e 3), e poi definito una vista generica (riga 10), che poi inizializzeremo con la classe &#8220;iPhoneDetailController&#8221; oppure &#8220;OtherDetailController&#8221;, a seconda del caso. Perchè abbiamo utilizzato &#8220;UIViewController&#8221; come tipo dell&#8217;elemento &#8220;detail&#8221;? Perchè abbiamo sfruttato un paradigma della programmazione ad oggetti, che ci permette di definire un elemento con una superclasse, per poi inizializzarlo con una sottoclasse più specifica.</p>
<p style="text-align: left;">Ora apriamo il file &#8220;TabellaController.m&#8221; e inseriamo il metodo che viene richiamato quando si clicca su una cella:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// Metodo relativo alla selezione di una cella</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>tableView<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>UITableView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>tableView didSelectRowAtIndexPath<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #400080;">NSIndexPath</span> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>indexPath <span style="color: #002200;">&#123;</span>
&nbsp;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>indexPath.row <span style="color: #002200;">==</span> <span style="color: #2400d9;">0</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#123;</span>
		<span style="color: #11740a; font-style: italic;">//l'utente ha cliccato sull'elemento iPhone, quindi carichiamo la vista relativa</span>
		detail <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>iPhoneDetailController alloc<span style="color: #002200;">&#93;</span> initWithNibName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;iPhoneDetail&quot;</span> bundle<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSBundle</span> mainBundle<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span>
		detail <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>OtherDetailController alloc<span style="color: #002200;">&#93;</span> initWithNibName<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;OtherDetail&quot;</span> bundle<span style="color: #002200;">:</span><span style="color: #002200;">&#91;</span><span style="color: #400080;">NSBundle</span> mainBundle<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
&nbsp;
	<span style="color: #11740a; font-style: italic;">//Facciamo visualizzare la vista con i dettagli</span>
	<span style="color: #002200;">&#91;</span>self.navigationController pushViewController<span style="color: #002200;">:</span>detail animated<span style="color: #002200;">:</span><span style="color: #a61390;">YES</span><span style="color: #002200;">&#93;</span>;
	<span style="color: #11740a; font-style: italic;">//rilasciamo il controller</span>
	<span style="color: #002200;">&#91;</span>detail release<span style="color: #002200;">&#93;</span>;
&nbsp;
	detail <span style="color: #002200;">=</span> <span style="color: #a61390;">nil</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>Anche questo metodo lo avevamo già trovato nel tutorial dedicato alle tabelle. Analizziamo, però, il codice al suo interno. Troviamo inizialmente un ciclo if, che controlla se l&#8217;utente ha selezionato al prima cella, ovvero quella contenente l&#8217;elemento iPhone: se il controllo da esito positivo, inizializziamo l&#8217;elemento &#8220;detail&#8221; con la classe relativa alla vista &#8220;iPhoneDetail&#8221;, altrimenti con l&#8217;altra vista generica. La clausola &#8220;initWithNibName&#8221; si riferisce proprio al file xib che deve essere associato all&#8217;elemento &#8220;detail&#8221;.<br />
Dopo il ciclo troviamo le istruzioni che ci permettono di far apparire la nuova vista; non preoccupatevi troppo, sono sempre queste istruzioni da utilizzare.</p>
<p>Abbiamo concluso!! Clicchiamo su &#8220;Build and Go!&#8221; e godiamoci la nostra applicazione funzionante!!</p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-192.png"><img class="alignnone size-full wp-image-1410" title="Immagine 19" src="http://www.bubidevs.net/wp-content/uploads/2009/07/Immagine-192.png" alt="Immagine 19" width="414" height="770" /></a></p>
<p style="text-align: center;"><a href="http://www.bubidevs.net/wp-content/uploads/2009/07/TabBarTutorial_parte2.zip"><img src="http://www.bubidevs.net/Immagini/download_icon.png" alt="" width="33" height="40" align="middle" /></a> Se Avete Problemi, questo è il <a href="http://www.bubidevs.net/wp-content/uploads/2009/07/TabBarTutorial_parte2.zip">nostro file di progetto</a>.</p>
<p style="text-align: right;"><em>La guida è stata creata da Andrea Busi per “</em><a href="../2009/07/04/"><em>Bubi Devs</em></a><em>”. I meriti, quindi, sono del legittimo autore.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bubidevs.net/2009/07/11/devtutorial-18-tabbar-application-parte-2/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
	</channel>
</rss>

