【问题标题】:Initialize instance variables as key/value pair from NSDictionary?从 NSDictionary 将实例变量初始化为键/值对?
【发布时间】:2012-08-20 05:50:50
【问题描述】:

我将 NSObject 子类的公共接口定义为,

@interface MyObject : NSObject
{
    NSString *_key1;
    NSString *_key2;
    NSString *_key3;
}
- (id)initWithDict:(NSDictionary *)dict;
@end

是否有实现 initWithDict: 方法的技巧,以便我可以传递定义为

的 NSDictionary

{“key1”:“value1”,“key2”:“value2”,“key3”:“value3”}

init 方法可以设置相关的实例变量及其对应的“值”吗?

【问题讨论】:

    标签: objective-c initialization nsdictionary nsobject kvc


    【解决方案1】:

    你必须使用KVC

    NSDictionary *dict = @{@"key1" : @"value1", @"key2" : @"value2", @"key3" : @"value3"};
    for (NSString *key in [dict allKeys]) {
       [self setValue:dict[key] forKey:key];
    }
    

    【讨论】:

      【解决方案2】:

      除了 DrummerB 答案之外,如果您有如下嵌套对象,

      @interface InnerObject : NSObject
      {
          NSString *innerKey1;
      }
      @interface MyObject : NSObject
      {
          NSString *key1;
          NSString *key2;
          NSString *key3;
          InnerObject *innerObj; 
      }
      

      您也可以通过以下方法为 iVar innerKey1 设置值:

      MyObject *obj = [[MyObject alloc]init];
      obj.innerObj = [[InnerObject alloc]init];
      [obj setValue:yourValue forKeyPath:innerObj.innerKey1];
      

      【讨论】:

        【解决方案3】:

        您还可以像这样从字典中初始化实例变量/属性:

        [self setValuesForKeysWithDictionary:dictionary];
        

        这是关于 setValuesForKeysWithDictionary 的 Apple 官方文档:

        https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/#//apple_ref/occ/instm/NSObject/setValuesForKeysWithDictionary:

        【讨论】:

          猜你喜欢
          • 2013-07-04
          • 2017-11-16
          • 2013-11-10
          • 2011-12-25
          • 1970-01-01
          • 2012-08-31
          • 2017-04-05
          • 2011-03-18
          • 2010-11-26
          相关资源
          最近更新 更多