KVC该机制
KVC是cocoa的大招,用来间接获取或者改动对象属性的方式。
一、KVC的作用:
KVC大招之中的一个:

[self
setValuesForKeysWithDictionary:dict];

KVC的大招之二:

使用KVC在获取数值时,假设指定对象不包括keyPath的"键名"。会自己主动进入对象的内部查找

假设取值的对象是一个数组,相同返回一个数组

[self.carGroups valueForKey:@"title”];//
会在嵌套的plist文件里依次查找。

kvc机制的注意事项:

 1.
依据字典给模型赋值,一个个键值对给模型赋值,太麻烦了。利用KVC将字典中全部内容赋值给模型。须要注意假设模型中的属性和字典中key不匹配的时候,就会报错。报找不到模型中的属性。

2.模型中的属性能够不所有出如今plist文件里


二、KVC的使用
1.KVC能够改变私有变量。
2.KVC支持数学运算。

3.forKeyPath包括了forKey的功能。

4.forKeyPath中能够利用.运算符,一层一层的往下查找对象的属性。
5.假设forKeyPath查找对象的某一个属性为数组类型,会返回一个新的数组。
6.赋值
[self
setValue:tabBar
forKeyPath:@"tabBar"];
7.取值
[self
valueForKeyPath:@"tabBar”];

三、KVC内部的实现原理
KVC的内部实现原理:
利用KVC给模型属性赋值的内部实现原理(setValuesForKeysWithDictionary):会遍历字典中的全部键值对,然后调用模型对象的setValue:forKey,依据字典中的全部key。给模型属性赋值。

可是模型中的属性和字典中不匹配的时候。当模型调用setValue:forKey。这时候依据key没有找到模型中属性的时候,就会报错。


解决方案:
利用执行时机制依据模型中的属性找到字典中的键值对给属性赋值。这样就不会报找不到相应key错误。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

KVC该机制的更多相关文章

  1. iOS 常用设计模式和机制之 KVC

    KVC 1  key Value Coding,键值编码,是一种间接访问实例变量的方法 2  KVC 提供了一种使用字符串(key)而不是访问器方法,去访问一个对象实例变量的机制 3  KVC 常用方 ...

  2. 深入理解 KVC\KVO 实现机制 — KVO

    KVC和KVO都属于键值编程而且底层实现机制都是isa-swizzing,所以本来想放在一起讲的.但是篇幅有限所以就分成了两篇博文. KVC实现机制传送门 KVO概述 键值观察Key-Value-Ob ...

  3. ios使用kvc机制简化对json的解析

    在 ios开发中,我们经常需要对服务器的传回来的json进行解析,特别是对哪些字段特别多的就会又烦躁的情绪.tmd都是一样的东西,要为每个property赋值,真是累人啊.举个简单的例子吧.服务器会过 ...

  4. KVC/KVO原理详解及编程指南

    一.简介 1.KVC简介 2.KVO简介 二.KVC相关技术 1.Key和Key Path 2.点语法和KVC 3.一对多关系(To-Many)中的集合访问器方法 4.键值验证(Key-Value V ...

  5. iOS中关于KVC与KVO知识点

    iOS中关于KVC与KVO知识点 iOS中关于KVC与KVO知识点  一.简介 KVC/KVO是观察者模式的一种实现,在Cocoa中是以被万物之源NSObject类实现的NSKeyValueCodin ...

  6. 【转】 KVC/KVO原理详解及编程指南

    原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的 ...

  7. 转:KVC/KVO原理详解及编程指南

      作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或 ...

  8. KVC & KVO 入门

    KVC: 简介: 全称 Key-Value Coding .KVC是一种间接访问对象属性(用字符串表征)的机制,而不是直接调用对象的accessor(setter/getter)方法或是直接访问成员对 ...

  9. kvc和kvo的使用情况的了解

    了解cocoa:Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OS X上五大API之中的一个(其他四个是Carbon.POSIX.X11和Java). 苹果的面向对象开 ...

随机推荐

  1. C++中出现的计算机术语1

    access labels(訪问标号) 类的成员能够定义为 private,这能够防止使用该类型的代码訪问该成员. 成员还能够定义为 public,这将使该整个程序中都可訪问成员.  address( ...

  2. 如何配置web服务器

    如何配置web服务器 (1)了解DNS主机名和IP地址.如果此WEB服务器在Internet上,需向ISP申请和注册此服务器的DNS主机名和IP地址.如果此服务器只在企业网内使用,则在内部的DNS服务 ...

  3. IE6下position:fixed不支持问题及其解决方式

    IE6有诸多奇葩,不支持position:fixed就是当中之中的一个.所以在做一些比方固定在顶部或者底部或者固定元素的效果时须要考虑兼容IE6的这个问题.解决方式是用Ie6的hack. *html ...

  4. 一个好用的Dialog插件

    网页中常常须要弹出dialog,尽管非常多JS开源框架都提供这个功能,可是效果都不是非常好,比方easy-UI.改动样式这些又不是我擅长的,身边又没有美工兄弟,苦逼啊! (Easy-UI的BasicD ...

  5. cURL安装和使用笔记

    0.前言     cURL是一个利用URL语法在命令行下工作的文件传输工具.它支持文件上传和下载,所以是综合传输工具,但习惯称cURL为下载工具.cURL还包含了用于程序开发的libcurl.cURL ...

  6. 【机器学习】SVM核函数

    知识预备 1. 回顾:logistic回归出发,引出了SVM,即支持向量机[续]. 2.  Mercer定理:如果函数K是上的映射(也就是从两个n维向量映射到实数域).那么如果K是一个有效核函数(也称 ...

  7. zoj 2822 Sum of Different Primes (01背包)

    ///给你n 求他能分解成多少个的不同的k个素数相加之和 ///01背包,素数打表 # include <stdio.h> # include <algorithm> # in ...

  8. [Android面试题-7] 写出一个Java的Singleton类(即单例类)

    1.首先明确单例的概念和特点: a>单例类只能有一个实例 b>单例类必须自己创建一个自己的唯一实例 c>单例类必须为其他所有对象提供这个实例 2.单例具有几种模式,最简单的两种分别是 ...

  9. spring Annotation 组分注塑

    spring 注意分类 启动spring自己主动扫描功能 <context:component-scan/> 1.@Repository: 它用于将数据訪问层 (DAO 层 ) 的类标识为 ...

  10. Android中Menu的基本使用方法

    一. 使用xml定义Menu 菜单资源文件必须放在res/menu文件夹中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用于设置菜单 ...