Eccoci giunti con l’ultimo appuntamento dei nostri tutorial dedicati alla realizzazione di un semplice client per Twitter. Vi ricordo che trovate qui la prima parte, metre qui la seconda.
In questa terza (ed ultima) parte vedremo come utilizzare la classe NSUserDefault, che ci permetterà di salvare delle informazioni relative alla nostra applicazione. Quello che andremo a salvare sarà la data in cui è stato eseguito l’ultimo refresh, che mostreremo all’avvio all’utente.
Ovviamente questa è una semplificazione, in applicazioni più complesse potremmo avere molte più informazioni da memorizzare (ad esempio dei settaggi come l’autorefresh, il nome utente o la password).
Prenderemo quindi in esame solo il salvataggio di un parametro, ma vedrete che non sarà nulla di difficile!
1. Inseriamo la label per mostrare la data
La prima cosa da fare è inserire una label in cui venga visualizzata l’ultima data in cui è stato eseguito un refresh della nostra timeline.
Nel file “SampleTwitterClientViewController.h” inseriamo la seguente dichiarazione (righe 12 e 24):
#import
#import "MGTwitterEngine.h"
@class Tweet;
@class TabellaTwitterViewController;
@interface SampleTwitterClientViewController : UIViewController <MGTwitterEngineDelegate> {
MGTwitterEngine *twitterEngine;
NSMutableArray *listaTweet;
IBOutlet UIActivityIndicatorView *spinner;
IBOutlet UILabel *labelUltimoRefresh;
TabellaTwitterViewController *tabellaTwitterViewController;
}
-(NSString*)getMessaggio:(NSDictionary*)element;
-(NSString*)getUser:(NSDictionary*)element;
-(NSURL*)getUrlImage:(NSDictionary*)element;
@property (nonatomic, retain) NSMutableArray *listaTweet;
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *spinner;
@property (nonatomic, retain) IBOutlet TabellaTwitterViewController *tabellaTwitterViewController;
@property (nonatomic, retain) IBOutlet UILabel *labelUltimoRefresh;
@end
Salviamo il file e apriamo “SampleTwitterClientViewController.xib”, che aprirà IB. Inseriamo una o due label (a vostro piacere), io ho fatto così:

La seconda label (quella che contiene il testo “Label”) sarà quella che visualizzerà la data dell’ultimo refresh della timeline. Selezioniamo ora “File’s Owner” e colleghiamo l’elemento “labelUltimoRefresh”, che abbiamo appena definito, con la label in questione. Se avete eseguito il collegamento in maniera corretta avrete il seguente risultato:

Abbiamo così completato questo primo step. Possiamo salvare tutto e chiudere Interface Builder.
2. Gestiamo il caricamento/salvataggio dei dati
Ora possiamo occuparci del codice che ci interessa, che andrà inserito nel file “SimpleTwitterClientViewController.m”.
Prima di fare qualsiasi cosa, ricordiamoci di importare la property definita in precedenza, tramite la seguente istruzione (dovete solo aggiungere “labelUltimoRefresh”, le altre le avete già definite):
@synthesize listaTweet, spinner, tabellaTwitterViewController, labelUltimoRefresh;
Possiamo passare alla parte più importante. Vediamo, quindi, come salvare i valori che ci interessano. Come abbiamo già detto, dobbiamo salvare la data dell’ultimo refresh che l’applicazione ha eseguito.
Il punto migliore per eseguire il salvataggio è dopo la creazione della lista con i vari tweet, che avviene nel metodo “statusesReceived: forRequest:”. Ecco, quindi, il codice da inserire in tale metodo:
[spinner stopAnimating];
NSData *dataCorrente = [NSDate date];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:dataCorrente forKey:@"data"];
[defaults synchronize];
[self presentModalViewController:self.tabellaTwitterViewController animated:YES];
Le istruzioni alle righe 1 e 8 le troviamo già (le abbiamo inserite nei precedenti tutorial), dobbiamo quindi inserire solo le restanti. Alla riga 3 abbiamo istanziato un elemento di tipo NSDate, richiamando poi il metodo “date”, che ci restituisce la data e l’ora corrente. Abbiamo ottenuto, quindi, la data dell’ultimo refresh.
Alla riga 4 e 5 eseguiamo il salvataggio vero e proprio: prima viene istanziato un oggetto di tipo NSUserDefault, poi si salvano al suo interno i valori desiderati. Ci sono vari metodi che devono essere utilizzati per salvare le variabili, a seconda del loro tipo. Nel nostro caso abbiamo utilizzato “setObject”, in quanto NSDate è un oggetto generico. Eccovi altri esempi di metodo per il salvataggio di variabili:
- [defaults setInteger:5 forKey:@”numeroIntero”];
- [defaults setBool:YES forKey:@”valoreBooleano”];
- [defaults setFloat:0.24 forKey:@”numeroFloat”];
Come potete notare ci sono vari metodi, a seconda del tipo di variabile. Li trovate tutti, comunque, nella documentazione.
L’ultima istruzione è alla riga 6, ovvero la chiamata del metodo “synchronize”. Non fateci troppo caso, inseritela. Chi di voi svilupperà applicazioni con multithread o accesso a risorse condivise dovrà sviluppare questo aspetto, per gli altri non è nulla di importante.
Ora non ci resta che inserire il codice che deve occuparsi della lettura del valore salvato. Tale lettura va eseguita, ovviamente, all’avvio dell’applicazione. Nel metodo “viewDidLoad”, quindi, aggiungiamo il codice seguente (dalla riga 14 alla 19):
-(void)viewDidLoad{
// Qui vanno dichiarati username e password per accedere a Twitter
NSString *username = @"nome_utente";
NSString *password = @"password";
// Create a TwitterEngine and set our login details.
twitterEngine = [[MGTwitterEngine alloc] initWithDelegate:self];
[twitterEngine setUsername:username password:password];
// Get updates from people the authenticated user follows.
[twitterEngine getFollowedTimelineFor:username since:nil startingAtPage:0];
NSDate *dataUltimoAgg = [[NSUserDefaults standardUserDefaults] objectForKey:@"data"];
if (dataUltimoAgg == nil) {
labelUltimoRefresh.text = @"nessun refresh precedente";
}else{
labelUltimoRefresh.text = [[NSString alloc] initWithFormat:@"%@",dataUltimoAgg];
}
[spinner startAnimating];
}
Come potete vedere, abbiamo definito un oggetto di tipo NSDate, che dovrà contenere il valore della data che leggeremo dai salvataggi. Per leggere tale valore, utilizziamo un metodo appropriato, nel nostro caso “objectForKey”. Se, invece, avessimo dovuto leggere un numero intero avremmo utilizzato il metodo “integerForKey”. Sono speculari, insomma, a quelli visti per il salvataggio dei dati. Nella documentazione, comunque, trovate tutti i metodi disponibili.
Abbiamo poi eseguito un controllo su tale valore: nel caso l’oggetto sia nullo (quindi non è stato letto niente), vuol dire che l’applicazione è avviata per la prima volta, quindi scriviamo un testo appropriato. In caso contrario, inseriamo nella label la data letta.
Abbiamo concluso anche il salvataggio dei dati!

Se avete problemi con il tutorial, questo è il nostro file di progetto.
Con questa terza parte si chiude il tutorial dedicato alla creazione di un semplice client per Twitter. Spero che l’idea vi sia piaciuta, se avete altre idee da proporre, da sviluppare in maniera simile a questa non esitate a contattarci!









2 Responses to “T#052 – Creiamo un client Twitter per iPhone (Parte 3)”
29 Giugno 2011
Installoso AppsincoInstallo subito westo progetto
7 Aprile 2013
DevTutorial #23 – Creiamo il nostro client per Twitter! (Parte 3) - Bubi Devs[…] Leggi il tutorial completo su devAPP […]