美文网首页HTML5 专栏
iOS KVC 是怎么通过value查找key的

iOS KVC 是怎么通过value查找key的

作者: 石虎132 | 来源:发表于2017-12-09 18:26 被阅读122次

//联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄

一、概念

1.ios获取字典里的内容并不区分它到底是什么类型(数组、字符、字典等等;

2.它就是一个容器。往里面保存东西的时候,用setValue:forKey:或者setObject:forKey:。

3.就是给你所要保存的对象(value),起一个名字(key),然后set进入到字典里。

二、测试代码

测试代码:

如果访问器方法和实例变量都没有找到,执行setValue:forUndefinedKey:方法,该方法的默认实现是产生一个 NSUndefinedKeyException 类型的异常,但是我们可以重写setValue:forUndefinedKey:方法

[person setValue:@"美女"forKey:@"张琼"];

崩溃错误:

2017-12-0917:42:55.324620+0800dddd[86208:2255303] *** Terminating app due to uncaught exception'NSUnknownKeyException', reason:'[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key 张琼.'

解决方法:

在Person.m文件中重写 - (void)setValue:(id)value forUndefinedKey:(NSString *)key

- (void)setValue:(id)value forUndefinedKey:(NSString*)key

{

NSLog(@"%s",__func__);

key =@"亲";

//NSString *keyStr = key;

NSString*valueStr = value;

NSLog(@"keyStr==%@   valueStr= %@",key,valueStr);

}

再次运行程序输出结果:

2017-12-0917:47:03.794080+0800dddd[86306:2259407] -[Person setValue:forUndefinedKey:]

2017-12-0917:47:03.794206+0800dddd[86306:2259407] keyStr==亲   valueStr= 美女

如图1:

三、实例代码:

1.//**********************Person.h 类

//  Copyright © 2017年 石虎. All rights reserved.

//

#import

@interfacePerson :NSObject

@property(nonatomic,copy)NSString*name;

@property(nonatomic,assign)intage;

@end

2.//**********************Person.m 类

//  Copyright © 2017年 石虎. All rights reserved.

//

#import"Person.h"

@implementationPerson

- (void)setName:(NSString*)name

{

_name= name;

NSLog(@"name--- %s  name = %@",__func__,name);

}

- (void)setAge:(int)age

{

_age= age;

NSLog(@"age-->> %s age = %d",__func__,age);

}

//重写

- (void)setValue:(id)value forUndefinedKey:(NSString*)key

{

NSLog(@"%s",__func__);

key =@"亲";

//NSString *keyStr = key;

NSString*valueStr = value;

NSLog(@"keyStr==%@   valueStr= %@",key,valueStr);

}

@end

3.//**********************ViewController.m 类

#import"ViewController.h"

#import"Person.h"//测试 kvc

- (void)test4

{

Person*person = [[Personalloc]init];

[personsetValue:@"石虎"forKey:@"name"];

[personsetValue:@10forKey:@"age"];

[personsetValue:@"美女"forKey:@"张琼"];

//    [person valueForKey:@"name"];

//    NSLog(@"----- == %@",[person valueForKey:@"name"]);

}

4.效果图:

谢谢!!!

相关文章

  • KVC分析

    KVC是什么? kvc 是key value coding 的缩写,在ios中用于通过key,来获取value,即...

  • iOS KVC 是怎么通过value查找key的

    //联系人:石虎QQ:1224614774昵称:嗡嘛呢叭咪哄 一、概念 1.ios获取字典里的内容并不区分它到底是...

  • Object-C中KVC

    什么是KVC KVC(Key-value coding)键值编码。iOS的开发中,可以允许开发者通过Key名直接访...

  • KVC 原理浅析学习<1>

    什么是KVC? KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key...

  • iOS KVC详解

    KVC定义 KVC(Key-value coding)键值编码,就是指iOS开发中,可以允许开发中通过Key名直接...

  • KVC与KVO

    KVC KVC(key-value coding),键值编码。是指可以在ios开发过程中,可以允许开发者通过key...

  • iOS中的KVC

    KVC简介 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key名间...

  • 笔记-KVC的底层实现原理

    KVC KVC(key-Value coding) 键值编码,指iOS开发中,可以允许开发者通过Key名直接访问对...

  • KVC & KVO

    一.什么是KVC KVC,key-value-coding,键值编码,即通过 key(属性名称)对 value(属...

  • iOS____浅谈KVC

    kvc的定义 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key名...

网友评论

    本文标题:iOS KVC 是怎么通过value查找key的

    本文链接:https://www.haomeiwen.com/subject/swrpixtx.html