关于字典快速映射到对象的学习心得

关于字典快速映射到对象的注意事项:model setValuesForKeysWithDictionary:dic

首先:正常的字典映射到对象是这样的:(图传不上来,手打一个吧)

model.name=[dic[i] valueForKey:@"name"];

下面就介绍一下快速映射的办法:不喜勿喷,其次你跟我喷不一定能喷过我。

1.model里面属性数量要包含字典里面的key数量(可以大于,但不可以小于,所有的key都要包含,这是最基本的条件,否者会crash)

2.key里面包含关键字的话是不能直接映射到对象的,但是可以用这个方法转换一下即可:(setValue:forUndefinedKey)也可以修改key里面的关键字,请看实例:

3.实例:model:

#import

@interface PersonInfoModel : NSObject

@property (nonatomic, strong) NSString  *name;

@property (nonatomic, strong) NSString  *age;

@property (nonatomic, strong) NSString  *address;

@end

Dic:

NSDictionary*dic = [NSDictionary dictionaryWithObjectsAndKeys:

@"Y.X.",  @"name",

@"26",    @"age",

@"海淀区",@"address", nil];

这是一一对应的,不会crash

3.1

给model怎么加属性:

@property

(nonatomic, strong) NSString  *aaaa;

现象:也不会报错

解释:包含了dic里面的key

3.2如果给dic增加键值对那就回报错

3.3关于key中关键字的处理(setValue:forUndefinedKey)

假如

NSDictionary*dic = [NSDictionary dictionaryWithObjectsAndKeys:

@"Y.X.",  @"name",

@"26",    @"id",

@"海淀区",

@"address", nil];里面包含id关键字的话,是无法直接映射到model对象里面的

在.h里面声明方法:

-(void)setValue(id)value forUndefinedKey:(NSString*)key;

在.m里面实现方法:

-(void)setValue(id)value forUndefinedKey:(NSString*)key

{

If ([keyisEqualTString:@”id”])

{

Self.myID=value;

}

}

即可将key的value转给model的MYID这个属性

最后:可以用model继承model,然后重载方法即可实现敏感字的转换。以后又新的心得再加上来。幸运,一定会眷顾积极上上的人。

你可能感兴趣的:(关于字典快速映射到对象的学习心得)