2012-03-26 2 views
0

Я хочу создать «бизнес-объект» на основе NSDictionary. Причина этого заключается в том, что я хочу, чтобы реализации могли расширять этот объект с помощью произвольных ключей, и другая причина заключается в том, что я сохраняю его с использованием удобного формата plist (хранящиеся объекты - целые числа, поплавки или строки).Создание объектов с NSDictionary-backed

Бизнес-объект содержит ряд предопределенных свойств, например.

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

Я хочу сериализуете, например, к списку свойств (это не является строгим требованием, это может быть какой-то другой формат, удобный в использовании). Предпочтительно осуществление класса должно быть только

@synthesize customerName, productCode, count, unitPrice: 

для примера выше. Чтобы использовать этот класс, я хочу сделать что-то вроде:

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

ответ

0

«путь наименьшего сопротивления» оказалось использовать вместо NSCoding.

2

Вы должны подать жалобу своего класса в KVC. KVC делает магию. 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

Хороший вопрос! Мой класс имеет рудиментарное соответствие KVC (без проверки и т. Д.). Но как мне перейти оттуда к планете? Наверное, это ядро ​​моего вопроса. EDIT: Я думаю, что переход от * plist сложнее, но мне это не нужно для этого случая. – Krumelur

+0

@ Krumelur. Ред. – Vignesh

+0

Спасибо. Я также обновил свой вопрос :) – Krumelur

Смежные вопросы