【问题标题】:Automatically populate all properties of an Objective C instance with a dictionary使用字典自动填充 Objective C 实例的所有属性
【发布时间】:2010-12-18 03:45:22
【问题描述】:

我有一个带有属性的类,我想从字典中设置值。

换句话说,我想自动化这个:

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

类似这样的东西(伪代码):

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

【问题讨论】:

  • 承认它是 python 没关系(尽管你需要一个 .iteritems() 或 .items() :-)

标签: objective-c introspection


【解决方案1】:

好的,除非我遗漏了什么,为什么不创建一个类似的方法:

setObjectProperties: (id) Object withValues:(NSDictionary *)dict

【讨论】:

    【解决方案2】:

    我从来没有这样做过,但这似乎应该可以工作:

    对于字典中的每个key

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

    (形成setMethod 的代码是伪代码并留作练习,因为Obj-C 字符串操作太可怕了。)

    【讨论】:

    • 这只是在重新发明 KVC 轮子。
    • 当然是!我建议为接受的答案投票(这对我来说是个新闻)。
    【解决方案3】:

    您可以使用键值编码方法setValuesForKeysWithDictionary:。它正是你想要的。只需[someObject setValuesForKeysWithDictionary:propertiesDictionary]

    【讨论】:

      猜你喜欢
      • 2010-12-15
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      相关资源
      最近更新 更多