热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

KVC(Keyvaluecoding)机制

KVC(Key-valuecoding)是一套利用字符串标识符间接访问对象属性和关系的机制。CocoaProgramming中,CoreData,App

KVC(Key-value coding)是一套利用字符串标识符间接访问对象属性和关系的机制。Cocoa Programming中,Core Data,Application Scriptability, 绑定(Binding)技术和声明属性之一语言特性等,都是以KVC为基础的。(Application Scriptability 和 绑定(Binding)是Mac OS X上特有的)。你也可以用Key-value coding来简化你的代码。

KVC的基础

Keys and Key Paths

KEY:键(Key)是一个标识了对象的某个属性的字符串。通常,在接收对象中,一个键对应的是一个访问方法或者实例变量的名称。Key必须是ASCII编码,以小写字母开头,并且不能包含空白符。

键的一些示例:payee, openingBalance, transactions, amount

Key Path:键路径(Key Path)是一个由多个Key组成,Key与Key之间用点(.)分开的字符串,通过顺序遍历,获取对象属性。键路径中的键序列的第一个键相对于当前的接收对象,而后续的键只与前一个键对应的属性相关。

例如,对于键路径address.street,其中我们从当前的接收对象中获取address这一属性值,然后再通过这个address的对象属性去获取street属性。

Getting Attribute Values Using Key-Value Coding

方法valueForKey: 返回特定键对应的值,这个值是与接收对象相关的。如果输入的键没有对应的方法或者实例变量,接收对象会发出valueForUndefinedKey: 消息。方法valueForUndefinedKey:默认会抛出NSUndefinedKeyException异常,可以在子类中改写。

方法valueForKeyPath: 与之类似,返回特定键路径在对应接收对象中的值。当键路径的键序列中有任何一个键无法对应兼容KVC的对象,则接收对象都会发出valueForUndefinedKey: 消息。

方法dictionaryWithValuesForKeys: 对输入的键数组中的每一个键进行检索,返回包含了这些键对应的值的NSDictionary。

注:集合对象(Collection Object),如NSArray, NSSet, NSDictionary等不能包含nil值。可以使用NSNull来替代nil放入集合对象中标识空值。NSNull提供一个简单的实例来表示对象属性的nil值。在方法 dictionaryWithValuesForKeys: 和 setValuesForKeysWithDictionary: 中,NSNull和nil之间的转换是自动的,所以你的对象不用明确测试NSNull值。

Setting Attribute Values Using Key-Value Coding

方法setValue:forKey: 给特定的键设值,这个值相对于对应的接收对象或者是已经提供的值。

方法setValuesForKeysWithDictionary: 使用NSDictionary来给一组键设值。该方法内部调用setValue:forKey:给每一组键值对设值。想存入空值时,使用NSNull取代nil.

转:https://www.cnblogs.com/lymf2725/p/4728521.html



推荐阅读
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
  • 第五章:集合01
    第三章:集合01一:集合的框架结构图1.集合和数组的区别:2.Collection集合的方法:publicclassCol ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文主要对比了Proxy和Object.defineProperty两种对象属性操作方式的优劣,并介绍了它们各自的应用场景。Proxy具有直接监听对象和数组变化、多种拦截方法以及新标准的性能优势等特点,而Object.defineProperty则兼容性好,支持IE9,并且无法用polyfill磨平浏览器兼容性问题。根据具体需求和浏览器兼容性考虑,选择合适的方式进行对象属性操作。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 查找给定字符串的所有不同回文子字符串原文:https://www ... [详细]
  • 1关于字符串相邻的两个或多个字符串字面值(引号引起来的字符)将会自动连接到一起:str_catpython!str_cat输出:python!把很长 ... [详细]
  • 转自:http:www.phpweblog.netfuyongjiearchive200903116374.html一直对字符的各种编码方式懵懵懂懂,什 ... [详细]
  • jsappsugar,基于,js,语法,定义 ... [详细]
  • 2015年iOS测试现状
    本文由伯乐在线-nathanw翻译,dopcn校稿。未经许可,禁止转载!英文出处:www.mokacoding.com。欢迎加入翻译小组。几周前,我决定将将我在mokacoding ... [详细]
author-avatar
小阳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有