2 votes

Quelle est la manière la plus élégante de coder/décoder un objet en dictionnaire ?

L'objet en question est constitué de paires clé/valeur, c'est-à-dire de @property. Existe-t-il un moyen élégant de coder/décoder cet objet en un dictionnaire ? Il semble que la force brute consiste à extraire manuellement chaque attribut et à créer le dictionnaire à la main.

3voto

Chuck Points 138930

La prise en charge par Objective-C de l'utilisation d'un objet en tant que dictionnaire fait son apparition. Codage clé-valeur :

NSArray *myAttributes; // Assume this exists
NSDictionary *dictRepresentation = [object dictionaryWithValuesForKeys:myAttributes];

3voto

Faut-il absolument que ce soit un dictionnaire ? Parce que NSKeyedArchiver vous donne le comportement du memento stocké par clé sans être réellement un NSDictionary - et présente l'avantage supplémentaire de pouvoir archiver de nombreux objets que la sérialisation par liste de propriétés ne prend pas automatiquement en charge. Il existe une bonne description de utilisation d'archiveurs et de désarchiveurs sur le wiki CocoaDev.

1voto

sbooth Points 9275

Si les clés que vous désirez sont des propriétés ObjC-2.0 de la classe en question, vous pourriez faire quelque chose de similaire à ce qui suit :

// Assume MyClass exists
unsigned int count = 0;
objc_property_t *properties = class_copyPropertyList([myClassInstance class], &count);
NSMutableDictionary *propertiesDict = [NSMutableDictionary dictionary];
unsigned int i;
for(i = 0; i < count; ++i) {
  NSString *propertyName = [NSString stringWithCString:property_getName(properties[i]) encoding:NSASCIIStringEncoding];
  id propertyValue = [self valueForKey:propertyName];
  if(propertyValue)
    [propertiesDict setObject:propertyValue forKey:propertyName];
}
free(properties), properties = NULL;
// Do something with propertiesDict

Il pourrait également s'agir d'une simple extension de classe.

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