Oltre all'ottimo approccio NSUserDefaults, esiste un altro modo semplice per archiviare i dati da un NSArray, NSDictionary o NSData in un file. È possibile utilizzare questi metodi così:
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag
rispettivamente (per un NSDictionary):
+ (id)dictionaryWithContentsOfFile:(NSString *)path
devi solo dare un percorso valido a una posizione. Secondo la Guida alla programmazione delle applicazioni iOS, la directory/Library/Caches sarebbe il posto migliore in cui archiviare i dati che è necessario mantenere tra l'avvio dell'app. (Vedi here)
Per memorizzare/caricare un dizionario da un archiviato chiamato "manager" del documento Directoy si potrebbe utilizzare questi metodi:
-(void) loadDictionary {
//get the documents directory:
NSArray *paths = NSSearchPathForDirectoriesInDomains (NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [paths objectAtIndex:0];
//create a destination file name to write the data :
NSString *fullFileName = [NSString stringWithFormat:@"%@/managers", cacheDirectory];
NSDictionary* panelLibraryContent = [NSDictionary dictionaryWithContentsOfFile:fullFileName];
if (panelLibraryContent != nil) {
// load was successful do something with the data...
} else {
// error while loading the file
}
}
-(void) storeDictionary:(NSDictionary*) dictionaryToStore {
//get the documents directory:
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cacheDirectory = [paths objectAtIndex:0];
//make a file name to write the data to using the
//cache directory:
NSString *fullFileName = [NSString stringWithFormat:@"%@/managers", cacheDirectory];
if (dictionaryToStore != nil) {
[dictionaryToStore writeToFile:fullFileName atomically:YES];
}
}
Comunque questo approccio è molto limitata e si deve dedicare molto lavoro extra se si desidera archiviare dati più complessi. In tal caso l'API CoreData è molto utile.
Perfetto! Grazie! – Toastor
'-setValue: forKey:' e '-valueForKey', rispettivamente, vanno bene. Inoltre, "standardUserDefaults" viene sempre eseguito il backup quando un iDevice viene sincronizzato. Questo è ottimo se vuoi includere gli acquisti in-app. – SK9
Grazie perfetto perfettamente funzionante –