关于 self setValueForKeysWithDictionary

记录一下.

作用:将字典转为模型。

优点:省时省力,不需要一个个的得到字典的vavlue,然后复制给model属性

注意:当model对象中,包含一个属性,但是字典里面没有的时候,不会报错.但是,当字典里面有一个键,没有在model找到对应的属性时,会报错.

首先,先初始化一个字典,如下所示:

-------------------------------------------------------------------------------------

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:
                         @"Y.X.",  @"name",
                         @"26",    @"age",
                         @"海淀区", @"address", nil];

-------------------------------------------------------------------------------------

创建PersonInfoModel,代码如下所示

-------------------------------------------------------------------------------------

#import <Foundation/Foundation.h>

@interface PersonInfoModel : NSObject

@property (nonatomic, strong) NSString  *name;
@property (nonatomic, strong) NSString  *age;
@property (nonatomic, strong) NSString  *address;

@end

-------------------------------------------------------------------------------------

#import "PersonInfoModel.h"

@implementation PersonInfoModel

@end

-------------------------------------------------------------------------------------

测试后打印信息如下:

以上是很标准的使用方法,我们再在属性中添加 other,如下图所示:

也没有出错,可以正常使用,也就是说用字典初始化对象时,只要对象中都包含了这些键值,是可以正常初始化的,我们再在字典中添加一个键值对,如下图所示:

直接导致程序崩溃,因为该对象中没有 sex 这个属性,解决方法就是,实现一个方法setValue:forUndefinedKey:,如下图所示:

这样子就会过滤掉给不存在的键值赋值,如果有个属性是id,而id本身就是系统自身关键字,不能够当做属性使用,怎么办?

结论:

setValue:forUndefinedKey:这个方法是关键,只有存在这个方法后,才可以过滤掉不存在的键值对而防止崩溃,同时,setValue:forUndefinedKey:这个方法中还可以改变系统的敏感字,或者,你手动的映射key值不同的值,随你自己喜欢.

时间: 2025-01-31 01:22:11

关于 self setValueForKeysWithDictionary的相关文章

KVC-键值编码是一种间接地访问实例变量的方式

KVC 键值编码是一种间接的访问实例变量的方式[对象 setValue:@"A" forKey:@"name"]; 工作原理:    1.先查找该类有没有对应的setName: setter方法.如果有则调用setter方法给实例变量赋值,如果没有,转到第二步:    2.在查找带下划线的实例变量_name.如果有则给_name赋值,如果没有则转到第三步    3.最后查找和key值相同的实例变量name,如果有,则给name赋值,如果没有,转到第四步    4.调

英雄展示

//LOL英雄展示#import "SKUIViewController"import "hero.h"@interface SKUIViewController()<UITableViewDataSource,UITableViewdelegate>@property(nonatomic,strong)NSArray *heros;@property(nonatomic,weak)IBOutlet UITableView *tableview;@end

Objective-C日记-之KVC

KVC(Key-Value-Coding?) 1, 概述 以字符串形式向对象的实例变量或属性(Property)发送或者获得值的方法. 2,用法 a,取值 @property (readwrite,copy)NSString * name; //car.h @synthesize name;//car.m 现在,我想获得name的值,则可使用KVC方法 NSString *name=[car valueForKey:@"name"]; b,设置值 [car setValue:@&quo

Dictionary

对象 转换成 整型.浮点型. intValue.floatValue cellDic[@"preFillValue"] floatValue] cellDic[@"unactivated"] intValue] [_citiesData valueForKeyPath:@"name"];返回数组中每个字典key是name的对象数组 KVC(setValueForKeysWithDictionary:)效率不高,用李明杰老师的setValues:

iOS基础-高级视图-UITableView--实例:QQ好友列表

事先已准备好plist文件,结构如下1.Root为Array.2.里面有十一个字典(每个字典为一个分组)3.每个分组里有friends,name,online三个属性4.friends属性里有若干字典(每个字典代表一个好友)5.每个好友字典里有4个属性,name,icon,intro和vip6.需要两个模型,分组模型和其里面的好友模型一.加载模型数据1.新建一个好友模型MJFriend,添加4个属性,提供加载模型数据的方法并实现@property(nonatomic,copy)NSString