• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#032 – Sfruttiamo NSUserDefaults per salvare dati delle nostre applicazioni iPhone

By bebus77 | on 13 Aprile 2010 | 16 Comments
Senza categoria

Se state sviluppando un’applicazione iPhone, molto probabilmente potreste aver bisogno di salvare dei dati durante l’uso dell’applicazione, da ritrovare poi ai successivi avvii del programma. Potreste sfruttare quello che vi proponiamo oggi per salvare, ad esempio, dei dati di configurazione per le vostre Applicazioni. Se questo è quello che cercate, sappiate che in nostro aiuto arriva NSUserDefaults, la quale ci permette proprio di salvare alcuni contenuti. Questi, una volta salvati, appariranno anche se chiudiamo e riapriamo la nostra app.

Come esempio costruiremo un’applicazione semplice, in cui dovremmo inserire del testo in una UITextField. Questo testo verrà salvato e faremo in modo di farlo riapparire poi al riavvio della nostra App. Diciamo che faremo un “Hello World!” avanzato!

Prima di tutto, apriamo Xcode, creiamo un nuovo progetto di tipo “View-based Application” e chiamiamolo “SalvaStringa” (o come preferite). Apriamo il file SalvaStringaViewController.h e dichiariamo gli outlets che useremo con le relative proprietà ed un’azione:

@interface SalvaStringaViewController : UIViewController {
	IBOutlet UITextField *campo;
	IBOutlet UILabel *testo;
}

- (IBAction)leggi;

@property (nonatomic, retain) IBOutlet UITextField *campo;
@property (nonatomic, retain) IBOutlet UILabel *testo;

@end

Come vedete tutto molto semplice, si tratta di una semplice Text Field, una Label di Testo e un’azione che useremo poi per leggere il contenuto del testo.

Apriamo il file SalvaStringaViewController.xib e passiamo a InterfaceBuilder. Costruiamo quindi la semplice interfaccia grafica, infine, colleghiamo dal pannello delle connessioni del nostro File’s Owner, i due outlets e il metodo creati precedentemente con Xcode con i nostri oggetti appena disegnati.



Modifichiamo ora il file “SalvaStringaViewController.m” come segue:

@synthesize campo, testo;

- (IBAction)leggi{
	NSString *stringaTesto = campo.text;
	testo.text = [[NSString alloc] initWithFormat:@"%@", stringaTesto];
	
	NSString *testoInserito = testo.text;
	NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
	[defaults setObject:testoInserito forKey:@"ciao"];
	[defaults synchronize];
}

Analizziamo il codice. Innanzitutto grazie a @synthesize saremo in grado di utilizzare tutte le proprietà dei nostri oggetti dichiarati in precedenza; nelle prime due linee abbiamo semplicemente letto il testo che l’utente inserisce nella Text Field e lo abbiamo fatto apparire nella nostra label. Nelle altre quattro, avviene il salvataggio del testo: tramite NSUserDefaults settiamo un oggetto (setObject:) e una chiave collegata con esso (forKey:).

Sempre nel file di implementazione (.m), scommentiamo il metodo viewDidLoad, che si trova un po’ più in basso e, dopo [super viewDidLoad];, scriviamo le seguenti istruzioni:

NSString *testoSalvato = [[NSUserDefaults standardUserDefaults] objectForKey:@"ciao"];
	if (testoSalvato == nil) {
		testo.text = @"Non hai ancora inserito il tuo nome";
	} else {
		testo.text = [[NSString alloc] initWithFormat:@"Ciao %@", testoSalvato];
	}

Questo codice verrà eseguito al caricamento della vista. Come potete vedere, abbiamo settato una NSString che riprende le informazioni necessarie da un oggetto di tipo NSUserDefaults con chiave “ciao” (quello di prima). Successivamente tramite un semplicissimo “if – else” diciamo cosa deve fare l’app in caso in cui non ci siano dati salvati e in caso che questi, invece, siano presenti.

Come ultimissima cosa, sempre nel file .m, inseriamo questo metodo per far nascondere la tastiera alla pressione del pulsante “Invio”:

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
	[textField resignFirstResponder];
	return YES;
}

Riaprite ora il file .xib e dopo aver cliccato sulla Text Field, andate nel pannello dele connessioni e collegate l’unico elemento (delegate) sotto gli Outlets al File’s Owner. (ATTENZIONE a questo passaggio, fonte di errore molto comune).

Abbiamo conluso la nostra applicazione! Cliccate su Build and Run, inserite un testo nella Text Field, premete il bottone ed ecco il risultato:



Se chiudete ora e riaprite l’applicazione questo sarà il risultato:



Alla prossima 🙂

Share this story:
  • tweet

Tags: NSStringNSUserDefaultsObjective-cTutorial Pratici

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • Uno sguardo al runtime Objective-c

    10 Settembre 2013 - 0 Comment
  • Andrea Picchi: Programmare con Objective-C 2.0 per iOS e OS X

    27 Febbraio 2013 - 10 Comments
  • T#107 – Le referenze associative: Aggiungiamo le variabili alle Categorie

    2 Aprile 2012 - 3 Comments

Author Description

Giovane sviluppatore iOS e Web. Mobile Development Director at eveonplay.

16 Responses to “T#032 – Sfruttiamo NSUserDefaults per salvare dati delle nostre applicazioni iPhone”

  1. 13 Aprile 2010

    dylandogg

    complimenti per il tutorial!! la mia domanda è: questo metodo può essere utilizzato per salvare dati tipo quelli di una app come brushes? se no cosa consigliate?

  2. 30 Maggio 2010

    Luigi

    io lho usato per salvare un dizionario di preferiti senza problemi

  3. 24 Luglio 2010

    dylandogg

    ciao a tutti, ho una multiview app. si tratta di un fumetto. se io volessi salvare una viewcontroller (tramite uibutton) che corrisponde ad una determinata pagina del fumetto (come il segnalibro di ibooks) e poi poterci tornare da un’altra viewcontroller sempre tramite uibutton… NSUserDefault fa a caso mio?

  4. 24 Luglio 2010

    bebus77


    dylandogg:

    ciao a tutti, ho una multiview app. si tratta di un fumetto. se io volessi salvare una viewcontroller (tramite uibutton) che corrisponde ad una determinata pagina del fumetto (come il segnalibro di ibooks) e poi poterci tornare da un’altra viewcontroller sempre tramite uibutton… NSUserDefault fa a caso mio?

    Potresti fare in questo modo, numeri le pagine e alla pressione del bottone controlla il numero lo salva con nsuserdefault e all’avvio dell’app controlla il numero e vai alla view con quel numero

  5. 26 Luglio 2010

    dylandogg

    Ok grazie!! ci provo!!


    bebus77:


    dylandogg:

    ciao a tutti, ho una multiview app. si tratta di un fumetto. se io volessi salvare una viewcontroller (tramite uibutton) che corrisponde ad una determinata pagina del fumetto (come il segnalibro di ibooks) e poi poterci tornare da un’altra viewcontroller sempre tramite uibutton… NSUserDefault fa a caso mio?

    Potresti fare in questo modo, numeri le pagine e alla pressione del bottone controlla il numero lo salva con nsuserdefault e all’avvio dell’app controlla il numero e vai alla view con quel numero

  6. 20 Agosto 2010

    Davide

    Ciao, vorrei sapere se questo metodo sfrutta la ram dell’iphone o la memoria “fisica”…va bene che quando riavvio l’app ritrovo tutto, però se riavvio il telefono continua a funzionare?
    Grazie,

  7. 15 Aprile 2011

    stefano

    possibile che non riesco a farlo funzionare questo programma ? chi mi manda via email il file per favore ?
    bmw0202@gmail.com

  8. 26 Aprile 2011

    Fabbroz75

    Ciao e complimenti per tutti Vostri sforzi nel creare questo meraviglioso sito dove poter imparare al meglio come sviluppare sotto iOS.

    Colgo l’occasione per chiderVi come poter salvare un file immagine scaricato online per farlo apparire come background. teoricamente dovrei entrare in una cartella tipo: /home/user/background e copiare dentro il file, ma le mie attuali conoscenze in obj-c sono minime, pur essendo uno sviluppatore da anni (asm,php, etc etc).

    Grazie per la Cortese Attenzione
    Fabrizio

  9. 11 Giugno 2011

    MaveDev

    Funziona perfettamente, molto utile grazie mille.
    Anche io sono curioso di sapere se questi dati sono salvati nella ram o nella memoria fisica del device, ma visto che non si fa’ accenno ne’ a core data ne’ al database sql, credo proprio siano salvati nella ram e i dati non siano salvati per sempre nel “melefonino”.
    Grazie ancora, ciao a presto 🙂

  10. 26 Giugno 2011

    Gingi74

    Ciao, ma se voglio salvare la posizione di un UISwitch, e ritrovarla nella stessa posizione dopo il riavvio del iPhone, come posso fare????????

  11. 1 Luglio 2011

    marco

    Ricavi il valore di stato e lo salvi associandolo a una chiave, ad esempio “statoSwitch”. Quando ricarichi l’app all’avvio cerchi tale valore e setti di conseguenza lo switch


    Gingi74:

    Ciao, ma se voglio salvare la posizione di un UISwitch, e ritrovarla nella stessa posizione dopo il riavvio del iPhone, come posso fare????????

  12. 25 Agosto 2011

    Gingi74

    Non ci riesco e questa cosa mi sta facendo impazzire, se non è troppo disturbo potresti fare un piccolo tutorial.
    Grazie comunque.

  13. 14 Dicembre 2011

    doMac

    ragazzi posso utilizzarlo per salvare più di un’informazione ?

  14. 29 Gennaio 2012

    Roberto

    Ciao ragazzi, sono nuovo nell’ambiente di programmazione xcode e devo ringraziare tutti per l’aiuto grande che fornisce questo sito.
    In questo caso non riesco a memorizzare più di un dato e penso di averle provate tutte. Ho cercato anche su altri forum sia italiani che non, ma niente.

    Aiuto!

  15. 12 Giugno 2012

    AntonelloPD

    Ciao a tutti,
    ottimo modo per salvare, e per cancellare questo dato associato a questa chiave ?
    funziona il :

    [ ... removeObjectForKey:@"" ]

    ??
    cosa devo mettere alla sinistra di questa chiamata ?

    Grazie mille e buon lavoro a tutti

  16. 23 Novembre 2012

    Luca

    Complimenti per l’articolo. volevo chiederVi se è consigliato utilizzare NSUserDefaults anche per storicizzare la risposta di una chiamata asincrona, tipo json. Oppure c’è altra struttura dati consigliata?

    Grazie in anticipo

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO