web-dev-qa-db-fra.com

Comment enregistrer les préférences utilisateur pour mon application iPhone?

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!!

44
Toastor

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.

128
Gauloises

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.

6
Chris

En rapide:

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).

Lectures complémentaires

5
Suragch

Vous recherchez NSUserDefaults

2
ennuikiller

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

0
PJ_Finnegan