2010-09-03 6 views
0

Je souhaite stocker le contenu de certaines variables dans un fichier. L'utilisateur ou l'application doit changer la valeur. Ce serait génial si l'utilisateur ne peut pas lire le contenu de ce fichier. Au démarrage, l'application lit le fichier et initialise certaines variables (globales?) Avec le contenu.Enregistrer les préférences dans un fichier et importer des valeurs pour initialiser les variables

Le fichier doit contenir certaines valeurs telles que l'URL du serveur, etc. Cela pourrait changer, mais je veux seulement gérer un fichier de préférences plutôt que de mettre à jour le code source. Sur une mise à jour par exemple, seul le fichier de préférences sera échangé.

Comment puis-je gérer cela?

NSUserDefaults n'est pas destiné à de tels problèmes, je pense. Dois-je utiliser un plist ou un fichier txt normal?

À quoi ressemblerait l'accès au contenu du fichier?

Vive

Répondre

0

donc la solution que je vais utiliser est que je charge un fichier plist comme valeur par défaut pour mes NSUserDefaults:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"plist"]; 
NSDictionary *settingsDict = [NSDictionary dictionaryWithContentsOfFile:filePath]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:settingsDict]; 
NSUserDefaults *settings = [NSUserDefaults standardUserDefaults]; 

NSString *serverURL = [settings stringForKey:@"ServerURL"]; 
NSLog(@"%@", serverURL); 

Taken de iPhone App : Where do I put a config file?

Je vais utiliser les deux plists et NSUserDefaults. paramètres que je vais définir comme variable globale dans le main.m Un problème subsiste:

Comment différencier les valeurs par défaut de l'utilisateur et les valeurs par défaut du système?

1

me semble NSUserDefaults est exactement ce dont vous avez besoin. Il vous permettra de stocker des URL (en tant que chaînes) et d'autres types de variables de base. Pourquoi pensez-vous que NSUserDefaults n'est pas la bonne solution ici?

Faites un essai! C'est facile à utiliser et fiable.

+0

Parce que partout c'est indiqué comme préférence de l'utilisateur. Je n'ai pas besoin d'une préférence d'utilisateur. J'ai besoin d'une préférence système. Mais je pense que tu as raison. Une chose que je n'ai pas encore découverte: Comment créer un "fichier" NSUserDefaults? Puis-je spécifier un certain plist comme NSUSerDefaults, que j'ai créé avant? – testing

+0

Je pensais que je peux éditer simplement les NSUserDefaults comme une plist dans Xcode. Mais ce n'est pas si simple. Vous devez travailler avec l'outil de ligne de commande ... Vous devez écrire "par défaut écrire ". Mais quel est le domaine? Le domaine est l'identifiant du bundle. Comment puis-je obtenir l'identifiant du bundle? J'ai seulement quelque chose comme com.yourcompany. $ {PRODUCT_NAME: rfc1034identifier}. Donc je dois changer l'identifiant. Qu'est-ce que je tape pour le nom du produit? Qu'en est-il de rfc1034identifier? Pourquoi ne peut-il pas lire mon nom de projet? Des questions sur des questions ... Info: http://www.cocoadev.com/index.pl?WorkingWithUserDefaults – testing

0

Utiliser un plist. Vous pouvez le charger avec -[NSDictionary initWithContentsOfFile:] (vous pouvez sauvegarder un dictionnaire sur une plist aussi facilement avec -[NSDictionary writeToFile:atomically:], bien que cela ne vous semble pas nécessaire).

+0

J'ai aussi pensé à un plist. Le problème est que je veux accéder aux valeurs de différentes classes. Cela signifie soit que j'attribue le plist à chaque fois ou que j'écris une classe de wrapper que je dois inclure dans chaque classe. Donc, les plistes ne seraient pas le meilleur choix. – testing

+0

Cela ne serait pas si différent que d'utiliser NSUserDefaults (qui est essentiellement un wrapper autour d'un plist - vous pouvez voir le fichier qu'il crée sous 'Library/Preferences/{bundleID} .plist'). Et pour ce qui est d'inclure les paramètres avec le paquet d'applications, le plist est la norme. – Brian

+0

Merci pour l'info. Je vais utiliser plist et NSUserDefaults. – testing

Questions connexes