博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
KVC中setValuesForKeysWithDictionary: (转载)
阅读量:4709 次
发布时间:2019-06-10

本文共 1650 字,大约阅读时间需要 5 分钟。

从字典映射到一个对象,这是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

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

测试后打印信息如下:

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

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

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

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

 

结论:

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

 

附录:

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

 

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

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

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

转载于:https://www.cnblogs.com/sjzlovecj/p/5535259.html

你可能感兴趣的文章
运输计划 洛谷P2680
查看>>
用 C# 计算 与 java 一致的unix时间戳 (长时间整形 如:1476956079961)
查看>>
找回任务栏得“显示桌面"图标
查看>>
mondrian 4.7 源码部署
查看>>
C#方法重载(overload)方法重写(override)隐藏(new)
查看>>
读书笔记1-编写可维护javascript代码
查看>>
Redis系列(三)—— 订阅/发布
查看>>
过拟合原因
查看>>
Hystrix使用入门手册(中文)
查看>>
jQuery学习-属性选择器
查看>>
mysql数据类型
查看>>
HBuilder ,及自用主题
查看>>
思科交换机备份与还原
查看>>
位运算-实现加减乘除
查看>>
Mac 自带的Apache php 狼神的
查看>>
requests模块高级使用
查看>>
决策树--从原理到实现
查看>>
css中的behavior
查看>>
xampp修改Mysql默认空密码
查看>>
出现 java.lang.OutOfMemoryError: PermGen space 错误的原因及解决方法
查看>>