back to top

Salviamo dei dati con NSUserDafault – Guida Sviluppo App iOS

Ogni applicazione degna di questo nome permette un certo grado di personalizzazione da parte dell’utente. Per "personalizzazione" s’intende la possibilità, per un utente, di poter salvare alcuni dati in maniera permanente per poterli recuperare ai successivi avvii dell’applicazione. Facciamo un esempio pratico per mostrare al lettore un classico utilizzo di salvataggio di dati. Immaginiamo che un’applicazione, al primo avvio, richieda all’utente di selezionare una lingua; successivamente viene caricato il menn dell’applicazione nella lingua selezionata. A questo punto è opportuno salvare questa impostazione per i successivi avvii in modo da caricare direttamente il menu recuperando il valore della preferenza per quanto riguarda la lingua.

Per fare ciò, il metodo più semplice, è quello di utilizzare una variabile di tipo NSUserDefault.

Mostriamo adesso un esempio pratico per prendere confidenza con questo strumento. Quello che vogliamo fare è, semplicemente, mostrare una label contenente il valore della preferenza; se nessuna preferenza è stata settata apparirà la scritta Nessuna Preferenza.

Creiamo un altro progetto di tipo View-based ed andiamo a posizionarci nel file di header del ViewController, dopodiche inseriamo il seguente codice:

@interface MrWebMaster5ViewController : UIViewController {
  IBOutlet UIButton *italiano;
  IBOutlet UIButton *inglese;
  IBOutlet UILabel *lingua;
}
-(IBAction)settaPreferenza:(id) sender;

@property(nonatomic,retain) IBOutlet UIButton *italiano;
@property(nonatomic,retain) IBOutlet UIButton *inglese;
@property(nonatomic,retain) IBOutlet UILabel *lingua;
Il codice, a questo punto della guida, è di facile comprensione.

Fatto ciò, spostiamoci nel file di implementazione del ViewController e andiamo a posizionarsi nel metodo viewDidLoad inserendo il seguente codice:

if(![[NSUserDefaults standardUserDefaults] objectForKey:@"lingua"]){
  [lingua setText:@"Nessuna preferenza"];
}	
else{
  NSString *s = [[NSString alloc]initWithString:
  [[NSUserDefaults standardUserDefaults] objectForKey:@"lingua"]];
  [lingua setText:s];
}
Lo standardUserDefault è un metodo che ritorna gli oggetti condivisi per l’applicazione in esame. Si immagini la struttura dei dati relativi ad NSUserDefault come una coppia Key Value e quindi, con il metodo objectForKey, andiamo a recuperare il valore dell’oggetto per la key specificata. Il ! che precede l’espressione è detto operatore di negazione e quindi il significato dell’espressione nell’if è: se non esiste un oggetto per la key lingua. Dunque se non è stata settata nessuna preferenza andremo a scrivere nella label Nessuna Preferenza altrimenti inizializziamo in una stringa il valore per la key lingua e poi inseriamo il valore nella label.

Andiamo adesso a vedere il codice del metodo setta preferenza che, di fatto, si riduce ad impostare un valore alle key lingua:

if(sender == inglese){
  [[NSUserDefaults standardUserDefaults] 
  setObject:[NSString stringWithFormat:@"INGLESE"] forKey:@"lingua"];
}
else{		
  [[NSUserDefaults standardUserDefaults] 
  setObject:[NSString stringWithFormat:@"ITALIANO"] forKey:@"lingua"];
}
[[NSUserDefaults standardUserDefaults] synchronize];
Si controlla, con un if, quale bottone è stato premuto e poi si setta il valore per la chiave lingua per mezzo del metodo setObject che prende in ingresso un qualsiasi oggetto. Da notare l’ultima riga di codice che permette il salvataggio delle modifiche, appena eseguite.

Adesso non ci resta che modificare il file. xib del ViewController inserendo una label e i due bottoni per la lingua per poi effettuare le opportune connessioni.

Pubblicitร 

In questa guida...