J'ai un UIPicker
qui charge les valeurs dans ses deux composants à partir d'un plist. C'est un NSDictionary
avec NSArrays
de chaînes. L'utilisateur sélectionne une paire de composants et le sélecteur renvoie ces deux chaînes au délégué. Ce dont j'ai vraiment besoin, c'est d'une constante qui va de pair avec chaque choix individuel. Par exemple, le premier composant est A, B, C et chaque choix a trois sous-choix A1, A2, A3, etc ... L'utilisateur sélectionne ChoiceA avec ChoiceA3 et le sélecteur renvoie bien les deux chaînes, mais j'ai une constante numérique qui est associée avec A-A3 et c'est ce dont j'ai réellement besoin pour les maths dans mon programme. Puis-je avoir deux choses associées à une clé particulière - une chaîne ET un nombre? Je suppose que ce que je veux est une paire clé-valeur-valeur (triplet)? Il semble que l'utilisation de la logique dans mon programme pour attribuer une valeur basée sur la paire valeur/clé retournée vienne à l'encontre de l'objectif d'utiliser un plist en premier lieu.Comment créer un NSDictionary avec deux valeurs par clé à partir de plist
Répondre
La structure idéale est en fait d'avoir un dictionnaire de dictionnaires.
A = {
A1 = 36;
A2 = 42;
A3 = 89;
};
B = {
B1 = 64;
...
Le plist est juste un format de collection (de collection). Je ne vois pas comment c'est vaincu.
Pour stocker la valeur-valeur-clé, vous avez 2 choix.
(1) Créer une nouvelle classe.
@interface StringNumberPair : NSObject {
NSString* strval;
int intval;
}
@property(copy) NSString* strval;
@property(assign) int intval;
-(id)initWithString:(NSString*)strval_ integer:(int)intval_;
@end
...
[theDict setObject:[[[StringNumberPair alloc] initWithString:@"string"
integer:42] autorelease]
forKey:@"key"];
- Pro - Interface claire. Contre - Vous avez besoin d'écrire beaucoup de code.
(2) Faire la valeur d'un tableau:
[theDict setObject:[NSArray arrayWithObjects:
@"string", [NSNumber numberWithInt:42], nil]
forKey:@"key"];
ou un dictionnaire:
[theDict setObject:[NSDictionary dictionaryWithObjectsAndKeys:
@"string", @"strval",
[NSNumber numberWithInt:42], @"intval",
nil]
forKey:@"key"];
- Pro - Ce sont les types standard pour stocker des valeurs structurées. Il est facilement sérialisable à une plist. Inconvénients - Les tableaux et le dictionnaire sont trop flexibles.
Je pense que j'aime l'idée d'utiliser un 'NSArray' pour les valeurs. Il me faudra du temps pour comprendre comment obtenir la première des deux valeurs (le 'NSString') pour être le deuxième composant du sélecteur, bien que ... Merci et restez à l'écoute. – Steve
J'ai décidé d'aller avec un objet pour mes données. Il s'appelle Chemical basé sur NSOBject et j'ai quatre propriétés, 2 chaînes, 1 flottant et un BOOL. Maintenant, le truc sera de charger le dictionnaire avec des produits chimiques. Je ne sais pas où dans mon code serait le bon endroit ... – Steve
Vous avez dit que votre valeur est un tableau de chaînes non?
Vous pouvez convertir la constante numérique à la chaîne
[NSString stringWithFormat:@"%d"numericConstant]
et l'ajouter au tableau.
reconvertir en int quand vous chercher dans le dictionnaire
[stringConstant intValue]
vous pouvez concaténer les deux chaînes et insérer un "_" entre? – neoneye