KVC中setValuesForKeysWithDictionary

摘要:
KVC中的方法提供了从字典到对象的映射。此方法为setValuesForKeysWithDictionary:。它非常容易使用。您不需要逐个为对象赋值并直接从字典中初始化。然而,如果你不好好使用它,它会经常崩溃。本教程将讨论这些用途的详细信息。首先,初始化字典,如下所示:--------------------------------------------------------------

从字典映射到一个对象,这是KVC中的一个方法所提供的,这个方法就是 setValuesForKeysWithDictionary: ,非常好用,不需要你来一一的给对象赋值而直接从字典初始化即可,但用的不好会经常崩溃,本教程就来讨论这些使用的细节.

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

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

    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

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

测试后打印信息如下:

KVC中setValuesForKeysWithDictionary第1张

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

KVC中setValuesForKeysWithDictionary第2张

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

KVC中setValuesForKeysWithDictionary第3张

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

KVC中setValuesForKeysWithDictionary第4张

KVC中setValuesForKeysWithDictionary第5张

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

KVC中setValuesForKeysWithDictionary第6张

KVC中setValuesForKeysWithDictionary第7张

KVC中setValuesForKeysWithDictionary第8张

结论:

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

附录:

哥教你一个一劳永逸的方式来处理这种映射到错误键值而导致崩溃的问题,首先,你先继承至 NSObject 类,实现方法setValue:forUndefinedKey:

KVC中setValuesForKeysWithDictionary第9张

KVC中setValuesForKeysWithDictionary第10张

然后,你新建一个model,继承至 YXModel 类,如下图所示:

KVC中setValuesForKeysWithDictionary第11张

KVC中setValuesForKeysWithDictionary第12张

然后使用,请注意,其有一个值为null,因为没有这个myID的键值嘛.

KVC中setValuesForKeysWithDictionary第13张

解决方法,重载父类的setValue:forUndefinedKey:,然后实现以下替换,即可.

KVC中setValuesForKeysWithDictionary第14张

免责声明:文章转载自《KVC中setValuesForKeysWithDictionary》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos 安装 apache2.4Ali CLI(AK配置) OSS(文件上传)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

什么是LMDB闪电记忆映射数据库

LightningMemory-MappedDatabase(LMDB)是一个软件库,它以键值存储的形式提供高性能的嵌入式事务数据库。LMDB是用C语言编写的,具有多种编程语言的API绑定。LMDB将任意键/数据对存储为字节数组,具有基于范围的搜索功能,支持单个键的多个数据项,并具有在数据库末尾附加记录的特殊模式(MDB_APPEND),可提供显着的写入性...

SQL和NoSQL

SQL和NoSQL  目前的数据库系统非常多,有传统的关系型的数据库系统(又被称为SQL数据库系统),有最近几年流行起来的NoSQL数据库系统。其中NoSQL数据库系统又分为很多种不同的类型,根据各个系统所支持的数据模型的不同,可以分为很多类,下面做一个简单的分类,更多的分类请参见dbengines的排名。 1、SQL数据库系统 ============...

按键中断消抖--2

外部中断按键处理 uchar g_ucKeyVal=0; uchar g_ucKeyCnt=0;   uchar g_ucKeySta=0;  代表有无按键按下 u8 KeyDeal(void) //获取按键值  ---记住不要延时 {     return data } //对获取键值,进行一下正确性处理 //关键字: g_ucKeySta ...

python(八):python使用lmdb数据库

一、入门代码 LMDB的全称是Lightning Memory-Mapped Database(快如闪电的内存映射数据库),它的文件结构简单,包含一个数据文件和一个锁文件: LMDB文件可以同时由多个进程打开,具有极高的数据存取速度,访问简单,不需要运行单独的数据库管理进程,只要在访问数据的代码里引用LMDB库,访问时给文件路径即可。 让系统访问大量小文...

Windows Server 2008 R2 免费使用 7200天 激活

首先安装后,有一个180天的试用期。 在180天试用期即将结束时,使用下面的评估序列号激活Svr 2008 R2 可以重新恢复180天试用期 Windows Server 2008 R2 Web: KBV3Q-DJ8W7-VPB64-V88KG-82C49 Windows Server 2008 R2 Standard: 4GGC4-9947F-FW...

键值对照表

键值对照表虚拟键值表虚拟键 十六进制值 十进制值 相应键盘或鼠标键VK_LBUTTON 1 1 鼠标左键VK_RBUTTON 2 2 鼠标右键VK_CANCEL 3 3 Ctrl-Break键VK_MBUTTON 4 4 鼠标中键VK_BACK 8 8 Backspace键VK_TAB 9 9 Tab键VK_CLEAR 0C 12 Clear键VK_RET...