Le titre de la question est assez révélateur - j'aimerais que mon application se souvienne de quelques points. C'est une sorte de calculatrice, elle devrait donc sauvegarder les dernières valeurs utilisées et certains paramètres sélectionnables par l'utilisateur.
En gros, j'aimerais économiser une poignée de flotteurs et de BOOL et les charger à nouveau lors du prochain chargement de l'application.
Quelle est la meilleure et la plus simple façon de faire cela?
Merci!!
Une des manières les plus simples serait de le sauvegarder dans la NSUserDefaults
:
Réglage:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:value
forKey:key];
// – setBool:forKey:
// – setFloat:forKey:
// in your case
[userDefaults synchronize];
Obtenir:
[[NSUserDefaults standardUserDefaults] objectForKey:key];
– boolForKey:
et
– floatForKey:
dans votre cas.
Outre la très bonne approche NSUserDefaults, il existe un autre moyen simple de stocker les données d'un NSArray, NSDictionary ou NSData dans un fichier. Vous pouvez également utiliser ces méthodes:
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag
respectivement (pour un NSDictionary):
+ (id)dictionaryWithContentsOfFile:(NSString *)path
il vous suffit de donner un chemin valide à un emplacement. Selon le Guide de programmation d'applications iOS, le répertoire/Library/Caches serait le meilleur endroit pour stocker les données que vous devez conserver entre les lancements d'applications. (voir ici )
Pour stocker/charger un dictionnaire depuis un fichier appelé "gestionnaires" dans votre document, vous pouvez utiliser ces méthodes:
-(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];
}
}
Quoi qu'il en soit, cette approche est très limitée et vous devez passer beaucoup de travail supplémentaire si vous souhaitez stocker des données plus complexes. Dans ce cas, l’API CoreData est très pratique.
Réglage
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setObject(value, forKey: key)
// userDefaults.setFloat(12.34, forKey: "myFloatKey")
// userDefaults.setBool(true, forKey: "myBoolKey")
Notez que pour iOS 8 et versions ultérieures, appeler userDefaults.synchronize()
est non recommandé .
Obtenir
let userDefaults = NSUserDefaults.standardUserDefaults()
if let value = userDefaults.objectForKey(key) {
print(value)
}
Notez que userDefaults.boolForKey
et userDefaults.floatForKey
renvoient tous deux des valeurs non facultatives. Ils ne seraient donc jamais nil
(uniquement false
ou 0.0
).
Vous recherchez NSUserDefaults
Swift 4/Linux
Apparemment, quelque chose a changé. Maintenant, il y a la classe UserDefault
. Vérifiez les liens suivants:
https://developer.Apple.com/documentation/foundation/userdefaults
https://www.hackingwithswift.com/read/12/2/reading-and-writing-basics-userdefaults