第一步、寻找相应setName 方法
第二步、如果没找到setName 方法,那么调用
+ (BOOL)accessInstanceVariablesDirectly //如果setName没有找到该方法,那么询问是否直接访问实例变量 directly 直接的
{
return YES;
}
如果上面返回YES 按顺序寻找 "符合条件" 的实例变量
@implementation person
{
//顺序往下
NSString * _name;
NSString * _isName;
NSString * name;
NSString * isName;
}
第三步、如果重写下面方法
#import "person.h"
@implementation person
-(id)valueForUndefinedKey:(NSString *)key
{
NSLog(@"key:%@",key);
return @"xxxxx";
}
-(void)setValue:(id)value forUndefinedKey:(NSString *)key
{
NSLog(@"key:%@",key);
}
@end
否则crash
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<person 0x600003560550> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key name.'
kvc使用案例
刚开始是长这个样子的,但是在pageControl 这个类中并不能找到相应的修改属性,这个时候用runtime去拿到这个私有属性,再通过KVC去修改
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
UIPageControl * pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(100, 100, 300, 60)];
pageControl.numberOfPages = 5;
pageControl.currentPage = 2;
pageControl.tintColor = [UIColor darkGrayColor];
[pageControl setValue:[UIImage imageNamed:@"changfangxing-2.png"] forKey:@"_pageImage"];
[pageControl setValue:[UIImage imageNamed:@"changfangxing-3.png"] forKey:@"_currentPageImage"];
[self.view addSubview:pageControl];
}