关于字典快速映射到对象的注意事项: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,然后重载方法即可实现敏感字的转换。以后又新的心得再加上来。幸运,一定会眷顾积极上上的人。