Oc KVC 键值编码

KVC (Key -Value -coding )键值编码

     是一种间接地访问对象实例变量的机制
     通过setValue: forKey :间接地为对象的实例变量做赋值
     通过valueForKey:间接地取到对象的实例变量


 首先定义两个类Person类 和phone类

赋值流程:

    //1.先检查有没有name这个实例变量
    //2.如果没有,会检查同名的带_的实例变量
    //3.如果还没有,会自动调用setValueForUndefinedKey:这个方法

    Person *per = [[Person alloc] init];
    [per setValue:@"shuai" forKey:@"na"];

标题 ##取值的过程

    //1.先检查有没有name这个实例变量
    //2.如果没有,检查有没有同名带_的实例变量
    //3.如果没有,就会自动调用valueUndefinedKey:这个方法
    NSLog(@"%@",[per valueForKey:@"name1"]);
    [per setValue:@18 forKey:@"age"];
    NSLog(@"%@",[per valueForKey:@"age"]);

    Phone *phone = [[Phone alloc] init];
    //[phone setValue:@"ipone" forKey:@"brand"];
    [per  setValue:phone forKey:@"phone"];
    NSLog(@"%@",[per valueForKey:@"phone"]);
   // NSLog(@"%@",[phone valueForKey:@"brand"]);
 //通过per为手机的品牌名赋值

//setValueForkeyPath
//给人的手机下地品牌赋值

    [per setValue:@"huawei" forKeyPath:@"phone.brand"];
    NSLog(@"%@",[phone valueForKey:@"brand"]);
    NSLog(@"%@",[per valueForKeyPath:@"phone.brand"]);


    // setValuesForKeysWithDictionary:<#(NSDictionary *)#>


    // insert code here...
    NSLog(@"Hello, World!");


    //使用数组管理图书
    NSMutableArray *bookArr = [[NSMutableArray alloc] initWithCapacity:1];
    Book *book1 = [[Book alloc] initWithName:@"三国演义" price:20];
    Book *book2 = [[Book alloc]initWithName:@"西游记" price:18];
    Book *book3 = [[Book alloc ] initWithName:@"水浒传" price:21];
    Book *book4 = [[Book alloc] initWithName:@"红楼梦" price:25];

    //tianjia

    [bookArr  addObject:book1];
    [bookArr addObject: book2];
    [bookArr addObject:book3];

安全处理

赋值时Key 不存在时会自动调用该方法
//防止KVC赋值时,由于key不存在导致崩溃,通常用于错误处理


- (void) setValue:(id)value forUndefinedKey:(NSString *)key {
    NSLog(@"forUNdefined");
    //NSLog(@"%@",key);这是举例,如果这儿不写将会自动过滤不存在的key值
    if ([key isEqualToString:@"na"]) {
        _name = value;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值