2012-03-26 4 views
0

Je souhaite créer un "objet métier" basé sur un NSDictionary. La raison en est que je veux que les implémentations soient capables d'étendre cet objet avec des clés arbitraires, et une autre raison est que je le persiste en utilisant le format plist pratique (les objets stockés sont des entiers, des flottants ou des chaînes).Création d'objets avec support NSDictionary

L'objet métier contient un certain nombre de propriétés prédéfinies, par ex.

@property NSString* customerName; 
@property NSString* productCode; 
@property int count; 
@property double unitPrice; 

Je veux sérialiser, par exemple une liste de propriétés (ce n'est pas une exigence stricte, il pourrait être un autre format facile à utiliser). De préférence, l'implémentation de la classe doit être juste

@synthesize customerName, productCode, count, unitPrice: 

pour l'exemple ci-dessus. Pour utiliser cette classe, je veux faire quelque chose comme:

MyBusinessObject* obj = [MyBusinessObject businessObjectWithContentsOfFile:fileName]; 
obj.productCode = @"Example"; 
[obj setObject:@"Some data" forKey:@"AnExtendedProperty"]; 
[obj writeToFile:fileName atomically:YES]; 

Répondre

0

Le "chemin de moindre résistance" est avéré être à l'aide NSCoding à la place.

2

Vous devriez faire votre plainte classe KVC. KVC fait la magie. Look here.Ex,

// assume inputValues contains values we want to 
// set on the person 

NSDictionary * inputValues; 
YOURCLASS * person = [[YOURCLASS alloc] init]; 

[person setValuesForKeysWithDictionary: inputValues]; 
+0

Bon point! Ma classe a une conformité KVC rudimentaire (pas de validation, etc.). Mais comment puis-je aller à partir d'un plist? Je suppose que c'est le coeur de ma question. EDIT: Je suppose que d'aller * à partir * d'un plist est plus difficile, mais je n'ai pas besoin de ça pour ce cas. – Krumelur

+0

@Krumelur. Édité. – Vignesh

+0

Merci. J'ai aussi mis à jour ma question :) – Krumelur