iOS开发之--字典快速赋值

Posted 稻草人11223

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发之--字典快速赋值相关的知识,希望对你有一定的参考价值。

以往在学习解析数据的时候,我们用的方法都是一个一个生命,然后加到字典里面,然后进行复制,那样的麻烦,而且也不能保证一次成功,不出错,我是遇到过多次key值的问题!

其实可以把复制的过程替换成一句话:

[test setValuesForKeysWithDictionary:dic];

问题一:model里面有不存在与dic中的元素会怎样?

这个时候,在控制台输出为空“=(null)”

问题二:如果字典当中有不存在与model中的元素会怎样?

会出错,或者崩溃,那是因为在model中,没有对应的age属性,所以导致了程序崩溃

解决方法:实现一个方法:setValue:forUndefinedKey: ,这个方法能过滤掉不存在的键值,

具体操作:

在model中添加

.h文件中添加:

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

并需要在m文件中实现:

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

    }

并不需要要方法中写任何内容!

问题三:如果dic中的key与model中的变量名字不同,应该怎么赋值?

从前面我们可以知道,dic中key赋值给model中与key同名的属性。

如果dic中的key值为username,model中的名字为name,等关键字,应该怎么变化。

解决:从setValue:forUndefinedKey方法入手。

改变dic中的值,还有model种的属性,

完善model中的setValue:forUndefinedKey方法:

-(void)setValue:(id)value forUndefinedKey:(NSString *)key{
        if([key isEqualToString:@"id"])
        {
            self.age=value;
        }
        if([key isEqualToString:@"username"])
        {
            self.name=value;
        }
    }

这样就可以了!当然也可以直接在dic和model里面修改成一致的!

以上是关于iOS开发之--字典快速赋值的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之使用Runtime给Model类赋值

iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值

字典的快速赋值 setValuesForKeysWithDictionary

ios开发runtime学习五:KVC以及KVO,利用runtime实现字典转模型

权限管理系统之字典(代码)管理

JEPLUS之字段快速创建的辅助工具—快速开发平台