Il delegato

Pubblicato il 28/06/2009 in Guide iPhone SDK Object-c Mac
[code]Prima di proseguire con altri tutorial cerco di chiarire un concetto che ho da poco appreso: il delegato.
Forse nell'Interface Builder avrete notato che molti oggetti hanno una voce chiamata "delegate" e immagino non l'abbiate mai considerata. Io ho sempre pensato fosse una cosa un po' inutile che non avrei mai usato se non per casi rari.
Mi sbagliavo di grosso! Il concetto di delegato è fondamentale per creare una applicazione degna di questo titolo XD.

Come abbiamo già appreso la programmazione in ambiente OS X (sia iPhone che Mac) è una programmazione orientata agli oggetti, il che significa che esistono degli oggetti che interagiscono tra di loro. Per esempio c'è l'oggetto che sa fare i calcoli matematici e l'oggetto che cambia le scritte sulla vista, c'è l'oggetto che si occupa di spostare una pallina... e un oggetto che gli dirà dove spostarla a seconda per esempio dell'inclinazione dell'iPhone o del nostro MacBook.

Facciamo un esempio pratico di quando usare un delegato.
Come dicevo sopra l'iPhone e il MacBook hanno l'accelerometro, questo è un'oggetto. Esso riceve dei dati dall'esterno ogni tot tempo (dovrebbe essere se non sbaglio ogni 0,01 secondi), però esso non sa cosa farsene di questi dati che conosce (vedi figura in alto).
Allora noi furbi programmatori gli diciamo all'accelerometro: "ogni volta che ricevi nuovi dati sulla tua inclinazione mandali al tuo delegato come sai fare tu".
Il "come sai fare tu" non è casuale, perché l'accelerometro ha dei metodi ben definiti, o meglio il suo delegato ha dei metodi bene definiti.

Quindi cosa fare in sostanza? Bastano due passaggi:
1. Dichiarare il suo delegato;
2. Implementare i metodi delegati all'oggetto delegato.

1.
Creiamo un oggetto di qualsiasi classe, ad esempio un NSObject e nell'implementazione settiamolo come delegato dell'accelerometro

/* l'oggetto accelerometro di dichiara così: */
/* [UIAccelerometer sharedAccelerometer] */

/* settiamo il delegato */
[ [UIAccelerometer sharedAccelerometer] setDelegate:self];


Ora il nostro oggetto è il delegato, e l'accelerometro ogni 0.01 secondi si rivolgerà a quest'oggetto e userà i suoi metodi per passargli i valori.

I metodi del delegato si trovano facilmente nella documentazione Apple.

2. Implementiamo i metodi del delegato nel file di implementazione

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{

/* azioni da eseguire una volta ricevuti i dati */
/* per esempio scriviamo l'inclinazione x nel debug */
printf("x= %f",acceleration.x");


}


Questo metodo ci fornirà l'oggetto accelerometro e le accelerazioni, per ricavare le accelerazioni sui 3 assi basta leggere le proprietà dell'oggeto UIAcceleration.
Per ricavare l'accelerazione x per esempio basta scrivere

float accelerazioneX = acceleration.x;


notare che "acceleration" è un oggetto contenente le informazioni di x,y,z che l'accelerometro trasmette al delegato col metodo sopra.

Ultima nota: nel file .h del delegato, affianco alla classe di appartenenza bisogna inserire:

@interface nomeoggetto : NSObject <UIAccelerometerDelegate> {

}


se avete domande come al solito, scrivete nei commenti.
Visite all'articolo: 30
Vota l'articolo (media attuale su 0 voti: )


Vuoi aggiungere un commento?
Il tuo nome
La tua email (non verrà pubblicata)
Commento
Francesco Burelli © 2009 tutti i diritti riservati.