• KVC课后笔记


    KVC基本赋值取值方法:

    setValueforKey:假如给的key的值name

     1、去类里面找是否有一个方法叫setName:有的话执行该方法,没有的话第二步

     2、去类里面找是否有个叫_name的实例变量,有赋值,没有执行第三步

     3、去类里面找是否有一个叫name的实例变量,有赋值,没有执行第四步

     4、查找当前类是否实现了setValueforUnderfinedKey:方法 如果有方法内部实现,如果还没,就会抛出异常,引起崩溃。

     valueForKey:假如给的key的值name

     1、去类面找是否有一个方法叫name,有的话执行该方法,没有的话第二步

     2、去类里面找是否有个叫_name的实例变量,有取值,没有执行第三步

     3、去类里面找是否有个叫name的实例变量,有取值,没有执行第四步

     4、查找当前类是否实现了valueForKey forUnderfineKey:方法,如果有方法内部实现,如果还没有,就会抛出异常,引起崩溃

     

    setValuesForKeysWithDictionary:

    终极有用=======================================用于数据解析 加深印象

    [实例对象 setValuesForKeysWithDictionary:字典名];可以从字典从提取实例变量到类中

    EQ:

     

     [per1 setValuesForKeysWithDictionary:dic];

     

        NSLog(@"%@",[per1 valueForKey:@"name"]);

     

        Student *stu = [[Student alloc]init];

     

        [stu setValuesForKeysWithDictionary:@{@"name":@"taixu",@"age":@"18",@"gender":@"m",@"major":@"iOS",@"id":@"aipao"}];

     

    //    NSLog(@"%@",stu);

     

        NSLog(@"%@",[stu valueForKey:@"id"]);

    此方法也是非常强大

    /如果字典中的Key 多于模型中的实例变量是,我们可以重写此方法 内部空实现,来避免赋值不比匹配出现的崩溃问题

    //如果处理特殊情况,如果字典中的KEY值是系统保留字,那么这时候赋值就会出现问题,我们可以在内部做异常处理,代码如下

    -(void)setValue:(id)value forUndefinedKey:(NSString *)key{

        if ([key isEqualToString:@"id"]) {

            self.ID = value;

        }

    }

    -(id)valueForUndefinedKey:(NSString *)key{

        if ([key isEqualToString:@"id"]) {

            return self.ID;

        }

        return nil;

    }

     

  • 相关阅读:
    [SCOI2005]骑士精神
    [SCOI2005]超级格雷码
    [SDOI2013]淘金
    [SCOI2014]方伯伯的商场之旅
    P4317 花神的数论题
    RSA算法原理(一)
    PKI 笔记
    字符串解析运用-将字符串分解为多个整数,求各整数之和(华为oj)
    pycharm快捷键、常用设置、配置管理
    启动ipython notebook(jupyter)
  • 原文地址:https://www.cnblogs.com/naizui/p/5090338.html
Copyright © 2020-2023  润新知