2014-04-11 16 views
6

Quando si salvano piccole quantità di dati dall'interno della mia app, è meglio usare NSUserDefaults o NSCoding? In questo momento io uso NSCoding (encodeWithCoder/initWithCoder, ecc.) Ma sembra che NSUserDefaults potrebbe essere più semplice. I miei dati totali riguardano una varietà di Ints/Strings/MutableArray, solo poche decine circa.NSUserDefaults vs NSCoding

+1

si sta confrontando le mele con le arance. È possibile utilizzare NSCoding per salvare qualcosa in NSUserDefaults, quindi quale contrasto stai cercando di disegnare? – matt

+0

Sembra che quello che vuoi sia 'NSPropertyListSerialization'. – iluvcapra

+1

Per ulteriori informazioni è stato dichiarato opaco, NSCoding non è affatto un meccanismo di archiviazione. Cosa stai facendo con i tuoi dati codificati? Questo è ciò che dovresti confrontare con NSUserDefaults. – rmaddy

risposta

4

Suppongo che per NSCoding intendi "salvare oggetti su file dopo averli serializzati con le API NSCoding". Sebbene entrambi gli approcci siano validi per i tipi di dati primitivi, l'approccio NSUserDefaults diventa più difficile una volta iniziato a serializzare oggetti con strutture complesse.

Al contrario, il salvataggio dei dati delle classi NSCoding in file offre un alto grado di flessibilità in termini di struttura degli oggetti. Se sai che non avrai bisogno di questa flessibilità in futuro, vai con NSUserDefaults; se non sei sicuro, rimani con i file.

+0

Sì, la tua ipotesi è corretta (la mia domanda avrebbe dovuto essere dichiarata più chiara). Continuerò con il metodo NSCoding/file poiché funziona già. Grazie. – wayneh

0

E 'la mia preferenza di utilizzare un file plist che è a livello di codice creato

NSString *appFile; 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    appFile = [documentsDirectory stringByAppendingPathComponent:@"myFile"]; 
    //this creates the file path 


    NSDictionary* tempDict = [[NSDictionary alloc]initWithContentsOfFile:appFile]; 
    //this gets the data from storage 

    [tempDict writeToFile:appFile atomically:YES]; 
    //this updates the data to storage