KVC中setValuesForKeysWithDictionary 崩溃问题

KVC 是键值编码,一个非正式的 Protocol ,提供一种机制来间接访问对象属性,KVO 就是基于 KVC 实现的关键技术之一

  • 在字典数组转模型数组时,使用这个setValuesForKeysWithDictionary,不用自己一一的给对象赋值而根据匹配类中与字典key同名的属性,并赋值给属性从而能预防自己匹配key 错误和减少代码代码量。

JSON 获取的数据

  • 执行完setValuesForKeysWithDictionary这个方法后只要对象中都包含了这些键值都有值了

属性

  • 但注意如果JSON里面的id和属性(模型属性)里面的id没有一一对应,我现在注释掉一个属性,再运行程序

注释掉一个属性

  • 控制台就是给我们报这样的错误:

程序崩溃

  • 直接导致程序崩溃,解决方法就是,实现一个方法setValue:forUndefinedKey:

setValue:forUndefinedKey:

  • 过滤掉给不存在的键值赋值,运行程序就不会崩溃了

输出过滤掉给不存在的键值赋值

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专注 Java 基础分享

深入理解Struts2----类型转换

     之前的一系列文章主要介绍了有关Struts2的一些基本用法和部分的简单原理,但是始终没有介绍有关拦截器的相关内容,从本篇开始我们将从另一个角度去深入理...

23290
来自专栏TungHsu

这或许是对小白最友好的python入门了吧——18,定义函数

有的时候我们写的代码往往是一个功能组合,并且这组代码可能会很复杂,但是我们在写代码的时候可能会多次用到这组代码,每次都写这么多代码浪费时间并且检查、修改起来也很...

35970
来自专栏从零开始学 Web 前端

C/C++练习题(二)

2、查找字符串中第一个只出现一次的字符并输出。(如:aabbcddefg 则输出 'c')

13240
来自专栏上善若水

P002PHP开发之变量定义

在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用,在全局范围内访问变量可以用特殊的 PHP 自定义 $GL...

11030
来自专栏Java技术栈

深度历险:Redis 内存模型详解

Redis 是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说 Redis 是实现网站高并发不可或缺的一部分。

20220
来自专栏Vamei实验室

Java进阶05 多线程

多线程 多线程(multiple thread)是计算机实现多任务并行处理的一种方式。 在单线程情况下,计算机中存在一个控制权,并按照顺序依次执行指令。单线程好...

22860
来自专栏自学笔记

python基本常识

tuple,str都可以看做是一种list,都可以进行切片操作。 利用切片操作,去掉一个字符串的前后空格。要注意是是前后空格是不止一个的,可能有很多个。

36850
来自专栏zaking's

用js来实现那些数据结构11(字典)

  我们这篇文章来说说Map这种数据结构如何用js来实现,其实它和集合(Set)极为类似,只不过Map是【键,值】的形式存储元素,通过键来查询值,Map用于保存...

31970
来自专栏刘望舒

Java虚拟机(二)对象的创建与OOP-Klass模型

前言 在前一篇文章中我们学习了Java虚拟机的结构原理与运行时数据区域,那么我们大概知道了Java虚拟机的内存的概况,那么内存中的数据是如何创建和访问的呢?这篇...

264100
来自专栏逆向技术

逆向知识第七讲,三目运算符在汇编中的表现形式,以及编译器优化方式

                  逆向知识第七讲,三目运算符在汇编中的表现形式 一丶编译器优化方式 首先说一下编译器优化方式. 1.常量折叠 2.常量传播 3...

28880

扫码关注云+社区

领取腾讯云代金券