Автоматически заполнять все свойства экземпляра Objective C словарем - PullRequest
2 голосов
/ 19 ноября 2009

У меня есть класс со свойствами, которые я хотел бы установить значения из словаря.

Другими словами, я хотел бы автоматизировать это:

objectInstace.val1 = [dict objectForKey:@"val1"];
objectInstace.val2 = [dict objectForKey:@"val2"];

с чем-то вроде этого (псевдокод):

for key, value in dict:
    setattr(objectInstance, key, value)

Ответы [ 3 ]

9 голосов
/ 19 ноября 2009

Вы можете использовать метод кодирования ключ-значение setValuesForKeysWithDictionary:. Это именно то, что вы хотите. Просто [someObject setValuesForKeysWithDictionary:propertiesDictionary].

0 голосов
/ 19 ноября 2009

Я никогда не делал этого, но похоже, что это должно работать:

Для каждого key в диктонарном:

NSString* setMethod = "set" + [key capitalizedString] + ":";  // This is pseudo-code.
SEL setSelector = NSSelectorFromString(setMethod);
[objectInstance performSelector:setSelector withObject:[dict objectForKey:key]];

(код для формирования setMethod является псевдокодом и оставлен как упражнение, потому что манипулирование строками Obj-C ужасно.)

0 голосов
/ 19 ноября 2009

хорошо, если я что-то упустил, почему бы не создать метод, подобный:

setObjectProperties: (id) Объект withValues: (NSDictionary *) dict

...