//联系人:石虎 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+0800 dddd[86208:2255303] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason:'[<Person 0x6000002361a0> 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+0800 dddd[86306:2259407] -[Person setValue:forUndefinedKey:]
2017-12-0917:47:03.794206+0800 dddd[86306:2259407] keyStr==亲 valueStr= 美女
如图1:
三、实例代码:
1.//********************** Person.h 类
// Copyright © 2017年 石虎. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic,copy)NSString *name;
@property (nonatomic,assign)int age;
@end
2.//********************** Person.m 类
// Copyright © 2017年 石虎. All rights reserved.
//
#import "Person.h"
@implementation Person
- (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];
[person setValue:@"石虎"forKey:@"name"];
[person setValue:@10forKey:@"age"];
[person setValue:@"美女"forKey:@"张琼"];
// [person valueForKey:@"name"];
// NSLog(@"----- == %@",[person valueForKey:@"name"]);
}
谢谢!!!