Comment stocker une checkbox dans une plist comme BOOL?
uocram
Membre
Pouvez-vous me donner la manière de stocker la valeur d'une checkbox dans un BOOL contenu dans le dictionary d'une plist qui n'est pas celle de l'utilisateur?
L'équivalent de cela :
[[NSUserDefaults standardUserDefaults] setBool:[myCheckBox state] forKey: myCheckBoxValueKey];
mais pour un dictionary quelconque dans un fichier .plist autre que celui de l'application.
D'avance merci.
L'équivalent de cela :
[[NSUserDefaults standardUserDefaults] setBool:[myCheckBox state] forKey: myCheckBoxValueKey];
mais pour un dictionary quelconque dans un fichier .plist autre que celui de l'application.
D'avance merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne suis pas sûr d'avoir très bien compris : tu crées un fichier plist à la main ? Parce que je vois plusieurs interprétations du problème :
-soit tu es effectivement en train de créer un fichier plist entièrement à la main, et tu utilises les méthodes associées au protocole NSCoding (pour l'archivage de fichiers)
-soit tu as créé une plist en mémoire (avec les méthodes et types de CoreFoundation, genre CFPropertyListRef), et tu dois utiliser les types CoreFoundation correspondants.
j'ai dit des bêtises ?
+
Chacha
un truc de ce genre ?
[[myDico objectForKey:@theBoolKey] setBool:[myCheckBox state] forKey: myCheckBoxValueKey];
Merci pour votre réponse rapide à tous deux.
Je souhaite écrire ma valeur dans un fichier .plist déjà créé qui n'est pas le fichier de préférences de mon application, donc que je ne peux pas atteindre avec [NSUserDefaults standardUserDefaults]
oxitan :
Ce serait cela, mais il semble qu'un NSMutableDictionary ne puisse pas répondre à -setBool:forKey:
Seul un NSUserDefaults le peut (d'après ce que je j'obtiens dans le Built result).
Autre possibilité?
En fait je n'ai toujours pas très bien compris. Sur quelles données travailles-tu ? Veux-tu simplement stocker une valeur booléenne dans un NSDictionary, indépendamment de ton contexte de plist ?
Dans ce cas, comme le NSDictionary ne peut stocker que des objets, il faut encapsuler le BOOL dans un NSNumber.
Je n'ai jamais vérifié si cela pouvait être automatique, mais tu peux faire la chose suivante:
NSNumber* boolObject = [NSNumber numberWithBool:[myCheckBox state]];
[myDico setObject:boolObject forKey:@theBoolKey];
Et pour décoder :
NSNumber* boolObject = [myDico objectForKey:@theBoolKey];
[myCheckBox setState:[boolObject boolValue]];
C'est exactement ce qu'il me faut.
Merci beaucoup Chacha.
En théorie ne faudrait-il pas écrire plutot:
la valeur réelle de NSOnState n'étant pas garantie, sans compter qu'il faut parfois compter avec NSMixedState aussi parfois.
Oh là , oui, tu as raison je pense. le "state" d'un checkBox est un int, pas un bool.
Donc autant stocker un int avec <numberWithInt> et le récupérer avec <intValue>
Oui c'est certainement le plus propre finalement Chacha
En fait la finalité d'un enregistrement de donnée sur disque n'est pas d'enregistrer la valeur exacte actuelle de NSOnState ou autre valeur spécifique à Cocoa.
Ce serait plutôt de savoir si telle condition est vraie, fausse, ou éventuellement indéterminée.
Pour la pérénité des données sauvegardées un fichier doit contenir la valeur "humaine" vraie/fausse/indéterminée, ou bien Male/Femelle etc ...
Charge après au logiciel qui lit les données de dire
si Male alors NSOnstate
sinon NSOffState
C'est la seule façon de s'affranchir véritablement de la valeur possiblement changeante un jour de NSOnState en respectant les données réelles manipulées par le soft.
En l'occurence, le format de données ne m'appartient pas, car je souhaite modifier une valeur d'interface d'une application tierce.
Cela dit, l'évocation de différentes possibilités est instructive. Et, de fait, il semble plus pérenne d'utiliser des valeurs proches de la réalité de l'utilisateur.