NSUserDefaults a cosa serve e come funziona

Objective-C

In poche parole potremmo dire che NSUserDefaults è una classe che ci permette di gestire in modo semplice e veloce alcune informazioni impostate dall’utente all’interno della nostra applicazione.

In realtà è molto di più ed una delle più interessanti funzionalità è quella di condividere dati tra applicazioni, ma limitiamoci ad esplorare il funzionamento basilare per la nostra app.

Impostazioni dell’app

L’uso più comune di NSUserDefaults è quello della gestione delle impostazioni dell’applicazione.
Attivare iCloud, disattivare il salvataggio automatico delle foto, impostare il raggio minimo delle regioni da monitorare, salvare lo username dell’utente, sono tutti dati che potremmo impostare all’interno della nostra app.

Ma dove salvare questi preziosi dati? In NSUserDefaults ovviamante!

Ecco quindi come fare. Prepariamo i nostri dati da, un booleano, un intero ed una stringa (dati a caso per l’esempio):

BOOL userWantsBeNotified = YES;
NSInteger regionMinimumRadius = 200;
NSString* username = @"JohnDoe";

Quindi scriviamo:

// 1.
NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];

// 2.	
[userDefaults setBool:userWantsBeNotified forKey:@"userWantsBeNotified"];
[userDefaults setInteger:regionMinimumRadius forKey:@"regionMinimumRadius"];
[userDefaults setObject:username forKey:@"username"];

// 3.
[userDefaults synchronize];

1. Instanziamo l’oggetto userDefaults, come vedete è un Singleton (leggete qui se vi siete persi l’articolo sull’argomento).
2. Settiamo questi dati nell’oggetto userDefaults.
3. Lasciamo salvare i dati al sistema. Questo punto è fondamentale, se lo tralasciate e l’app si chiude, i dati non verranno salvati e quindi saranno persi.

Per leggere questi dati?

Adesso che i dati sono stati scritti vediamo come poterli recuperare:

BOOL fromUD_userWantsBeNotified = [userDefaults boolForKey:@"userWantsBeNotified"];
NSInteger fromUD_regionMinimumRadius = [userDefaults integerForKey:@"regionMinimumRadius"];
NSString* fromUD_username = [userDefaults objectForKey:@"username"];
	
NSLog(@"From UD: userWantsBeNotified %d", fromUD_userWantsBeNotified);
NSLog(@"From UD: regionMinimumRadius %ld", (long)fromUD_regionMinimumRadius);
NSLog(@"From UD: username %@", fromUD_username);

Una riga di codice. Possiamo recuperare questi dati da NSUserDefaults ogni volta che vogliamo.
Se quindi è andato come previsto il debugger scriverà:

From UD: userWantsBeNotified 1
From UD: regionMinimumRadius 200
From UD: username JohnDoe

Curiosità

Se dovete salvare tanti dati prendete in considerazione l’idea di tenere le chiavi da passare a NSUserDefaults in qualche punto comune del codice così da non dover riscriverle ogni volta e minimizzare gli errori.

Link Utili

Scritto il