热门标签 | 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



推荐阅读
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • 来自FallDream的博客,未经允许,请勿转载,谢谢。一天一套noi简直了.昨天勉强做完了noi2011今天教练又丢出来一套noi ... [详细]
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • 本文详细介绍了Socket在Linux内核中的实现机制,包括基本的Socket结构、协议操作集以及不同协议下的具体实现。通过这些内容,读者可以更好地理解Socket的工作原理。 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • selenium通过JS语法操作页面元素
    做过web测试的小伙伴们都知道,web元素现在很多是JS写的,那么既然是JS写的,可以通过JS语言去操作页面,来帮助我们操作一些selenium不能覆盖的功能。问题来了我们能否通过 ... [详细]
  • 本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ... [详细]
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
  • 本文介绍了如何使用 Python 的 Pyglet 库加载并显示图像。Pyglet 是一个用于开发图形用户界面应用的强大工具,特别适用于游戏和多媒体项目。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • Hadoop集群搭建:实现SSH无密码登录
    本文介绍了如何在CentOS 7 64位操作系统环境下配置Hadoop集群中的SSH无密码登录,包括环境准备、用户创建、密钥生成及配置等步骤。 ... [详细]
  • Unity技巧:实现背景音乐的开关功能
    本文详细介绍了如何在Unity中通过脚本控制背景音乐的开启与关闭,适合初学者参考。 ... [详细]
  • 使用 Babylon.js 实现地球模型与切片地图交互(第三部分)
    本文继续探讨在上一章节中构建的地球模型基础上,如何通过自定义的 `CameraEarthWheelControl` 类来实现更精细的地图缩放控制。我们将深入解析该类的实现细节,并展示其在实际项目中的应用。 ... [详细]
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社区 版权所有