切记:请求的数据要存在相应的类中,不能在加载试图中请求数据

KVC就是对请求数据的一个简化

MainViewController.m

#import "MainViewController.h"#import "Student.h"@interface MainViewController ()@end@implementation MainViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}- (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view.    self.view.backgroundColor = [UIColor cyanColor];        //KVC的使用        Student *stu = [[Student alloc] init];        //KVC的作用:对一个对象的成员变量进行操作(赋值/取值)        //赋值的方法    [stu setValue:@"adfasdf" forKey:@"name"];//    [stu setValue:@"米4像苹果1" forKey:@"Name"];  //第一个查找//     [stu setValue:@"米4像苹果2" forKey:@"_Name"];   //找不到//    [stu setValue:@"米4像苹果3" forKey:@"_name"];  //           //这个是一个类中的属性赋值//    stu setValue:<#(id)#> forKeyPath:<#(NSString *)#>        NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"222", @"StudentID", @"liuyafang", @"name" ,nil];        [stu setValuesForKeysWithDictionary:dic];            //取值的方法    NSLog(@"%@",[stu valueForKey:@"name"]);            //KVO  键值观察  (注册一个观察者)(自己监视自己对象的内容)        //参数1:观察谁    //参数2:观察哪个属性    //参数3:在实现方法中获得新值合适旧值    //参数4:任意的指针类型    [stu addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:@"aaa"];        stu.name = @"pingguo45";    }- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{    NSLog(@"%@",keyPath);    NSLog(@"%@",object);    NSLog(@"%@",change);    NSLog(@"%@",context);}- (void)dealloc{//    self removeObserver:<#(NSObject *)#> forKeyPath:<#(NSString *)#>    [super dealloc];}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{    // Get the new view controller using [segue destinationViewController].    // Pass the selected object to the new view controller.}*/@end

Student.h

#import 
@interface Student : NSObject@property (nonatomic , retain)NSString *name;@property (nonatomic , retain)NSString *sex;@property (nonatomic , retain)NSString *studengID;//利用kvc对model进行封装- (instancetype) initWihtDictionary:(NSDictionary *)dic;@end

Student.m

#import "Student.h"@implementation Student- (void)setValue:(id)value forUndefinedKey:(NSString *)key{    //这个方法在类的内部实现,就用就是纠错    //一旦在赋值过程中,发现key没有周到对应的成员变量,就会调用这个发放    //如果没有重写个方法,就会crash        if ([key isEqualToString:@"id"]) {        _studengID = value;    }}- (id)valueForUndefinedKey:(NSString *)key{    //取值的纠错方法    if ([key isEqualToString:@"id"]) {        return  self.superclass;    }        return nil;}- (instancetype) initWihtDictionary:(NSDictionary *)dic{    self = [super init];    if (self) {        [self setValuesForKeysWithDictionary:dic];    }    return self;}- (void)dealloc{    [_name release];    [_sex release];    [super dealloc];}@end