美文网首页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.效果图:

    谢谢!!!

    相关文章

      网友评论

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

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