KVC中setValuesForKeysWithDictionary:
本文转载于:http://my.oschina.net/u/2407613/blog/524879?p={{page}}
从字典映射到一个对象,这是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:,然后实现以下替换,即可.

KVC中setValuesForKeysWithDictionary:的更多相关文章
- 小谈KVC中KeyPath的集合运算符
由于知识点比较简单,这里不再陈述一大堆的原理,直入主题. KVC中的集合运算符有以下三类: 1.简单集合运算符:@avg.@sum.@max.@min.@count (只能用在集合对象中,对象属性必须 ...
- iOS开发中KVC、KVO简介
在iOS开发中,KVC和KVO是经常被用到的.可以使用KVC对对象的属性赋值和取得对象的属性值,可以使用KVO监听对象属性值的变化.简单介绍一下KVC和KVO. 一:键值编码(KVC) KVC,全称 ...
- iOS 开发之 KVC - setValuesForKeysWithDictionary 解析
从字典映射到一个对象,这是KVC中的一个方法所提供的,这个方法就是 setValuesForKeysWithDictionary:,非常好用,不需要你来一一的给对象赋值而直接从字典初始化即可,但用的不 ...
- Objective-C中的KVC与KVO(上)
本文转载 李朴之先生博客 http://blog.csdn.net/pucker/article/details/7413280 Objective-C中的KVC与KVO是两种比较重要的技术,这里简要 ...
- swift 2.2 语法 (中)
前言: 1.此文中的语法会根据Swift的升级变动而更新. 2.如果需要请移步 -> swift2.2 语法(上).swift 2.2语法(下) 函数 和C语言一样,swift也有函数,性质和我 ...
- IOS-KVO&KVC
KVC(key value coding) 我们一般是通过调用set方法或属性的点语法来直接更改对象的状态,即对象的属性值,比如[stu setAge:10]; stu.age = 9; lKVC, ...
- iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
iOS开发UI篇—在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建 一.实现效果 说明:该示例在storyboard中使用动态单元格来完成. 二.实现 1.项目文件结构 ...
- iOS开发技巧系列---详解KVC(我告诉你KVC的一切)
KVC(Key-value coding)键值编码,单看这个名字可能不太好理解.其实翻译一下就很简单了,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值.而不需 ...
- [iOS基础控件 - 6.4] 汽车品牌展示 Model嵌套/KVC/TableView索引
A.需求 1.使用汽车品牌名称头字母为一个Model,汽车品牌为一个Model,头字母Model嵌套品牌Model 2.使用KVC进行Model封装赋值 3.展示头字母标题 4.展示索引(使用KVC代 ...
随机推荐
- zoj2588 Burning Bridges(无向图的桥)
题目请戳这里 题目大意:给一张无向图,现在要去掉一些边,使图仍然连通,求不能去掉的边. 题目分析:就是求无向图的桥. tarjan算法跑一遍,和无向图割点十分类似,这里要找low[v] > df ...
- 13-7-1 做了一个360优化大师的主页(就是一个主页UI)
模仿360优化大师做了一个下它的首页. 代码如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/re ...
- MySQL 查询结果以百分比显示
找了一些资料,然后我是用到了MySQL字符串处理中的两个函数concat()和left()1.[CONCAT(str1,str2,...) 返回来自于参数连结的字符串.如果任何参数是 NULL, 返 ...
- The MySQL C API 编程实例
在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有 ...
- django中怎样生成非HTML格式的内容。
某些时候可能有这种需求.在网页中点击一个链接或者一个button希望返回一张图片.一个pdf文档.一个csv文档等而非HTML. 在diango中非常easy做到这些.django中的view用来接收 ...
- openstack之horizon源码分析之二
一.概述: django基础入手: django新建project:#django-admin startproject mysite 生成如下目录: mysite ├── manage.py └── ...
- EF5 通用数据层 增删改查操作,泛型类(转)
using System; using System.Collections.Generic; using System.Data.Entity.Infrastructure; using Syste ...
- easyui的验证
加一个JS来重写验证,文件名为:validator.js 内容为: //扩展easyui表单的验证 $.extend($.fn.validatebox.defaults.rules, { //验证汉子 ...
- JS学习笔记(四)常用对象
Error // 语法 throw new Error("消息"); 类似于C#中的Exception对象 // alert(num); try { throw new Error ...
- jquery 浏览器放大缩小函数resize
<script> $(function(){ $(window).resize(function(){ var _height = $(window).height(); var _con ...