50 votes

Devrais-je utiliser NSUserDefaults ou un plist pour stocker des données?

Je vais stocker quelques chaînes (peut-être 10-20). Je ne sais pas si je devrais utiliser NSUserDefaults pour les enregistrer ou les écrire dans un plist. Qu'est-ce qui est considéré comme la meilleure pratique? NSUserDefaults semble contenir moins de lignes de code, donc plus rapide à implémenter.

J'aimerais ajouter que ces valeurs de chaîne seront ajoutées / supprimées par l'utilisateur.

84voto

doppioslash Points 936

Je suis en supposant un tableau, mais il faudra travailler avec les dictionnaires.

Userdefaults, les Données de Base et les Plists pouvons tous être en lecture/écriture, mais si vous utilisez un fichier plist vous avez besoin de prêter attention à ce que vous dir. Voir le plist partie vers le bas ci-dessous.

Données de base je pense que c'est beaucoup trop exagéré, c'est juste des chaînes de caractères. Il est censé être utilisé quand vous voulez persister des objets plus complexes.

NSUserDefaults:

Il est assez rapide et facile à faire, même si c'est censé stocker uniquement les paramètres de l'utilisateur. Pour écrire à la userdefaults:

NSArray *stringsArray = [[NSArray alloc] arrayWithObjects: string1, string2, string3, nil];
[[NSUserDefaults standardUserDefaults] setObject:stringsArray forKey:@"MyStrings"];
[[NSUserDefaults standardUserDefaults] synchronize]

Pour lire le de la userdefaults:

NSArray *stringsArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyStrings"];

Plist:

Si vos cordes sont va être modifié, vous aurez besoin d'écrire et de lire un fichier plist mais tu ne peux pas pas écrire dans votre application.

  1. Pour avoir une lecture/écriture plist d'abord trouver le répertoire documents de l'

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *stringsPlistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Strings.plist"];
    
  2. Créer le tableau (je suis en supposant que les chaînes sont string1, ...)

    NSArray *stringsArray = [[NSArray alloc] arrayWithObjects: string1, string2, string3, nil];
    
  3. écrire dans un fichier

    [stringsArray writeToFile:stringsPlistPath atomically:YES];
    

Pour lire le fichier plist:

  1. trouver le répertoire documents

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *stringsPlistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Strings.plist"];
    
  2. lu dans:

    NSArray *stringsArray = [NSArray arrayWithContentsOfFile:stringsPlistPath];
    

8voto

Mundi Points 33074

Si vous stockez 10 à 20 chaînes et que vous recherchez peu de lignes de code, les données de base représentent certainement une charge beaucoup trop importante. Je recommande d'aller avec le plist. Pas beaucoup de code:

 NSURL *plistURL = [[NSBundle mainBundle] URLForResource:@"MyStrings" withExtension:@"plist"];
NSArray *stringArray = [NSArray arrayWithContentsOfURL:plistURL];
 

5voto

Yannick L. Points 4662

NSUserDefaults stockera les préférences de l'utilisateur dans un fichier du dossier Library / Preferences. En théorie, il ne sert qu'à stocker certaines propriétés d'application / utilisateur.

Les fichiers Plist sont utiles pour gérer un seul fichier. Si vous avez besoin de gérer davantage, vous devriez utiliser la Coredata. Il n'y a pas de restriction sur la taille du fichier plist. Sinon, vous devez être prudent avec le fichier plist car lorsque vous aurez besoin de le sauvegarder ou de le lire, tout le contenu du fichier sera chargé en mémoire.

2voto

Tim Dean Points 5161

Cela dépend de ce que vous voulez stocker et pourquoi. NSUserDefaults est destiné à stocker les préférences de l'utilisateur. Vous pouvez essayer de l'utiliser pour autre chose, mais vous ne devriez probablement pas.

Sinon, si vos besoins sont simples, un fichier Plist est assez simple. Vous pouvez également utiliser des données de base ou créer votre propre format de fichier. En général, j'utilise plist pour des tâches simples, puis je passe aux données de base pour tout ce qui est plus complexe.

1voto

Marcus Karlsson Points 2023

La méthode recommandée pour conserver des données comme celle-ci consiste à utiliser les données principales. Bien que NSUserDefaults puisse être utilisé pour stocker plus ou moins tout ce qui est censé l'être, il est uniquement censé être utilisé pour stocker les préférences.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X