zoukankan      html  css  js  c++  java
  • 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;

    }

     

  • 相关阅读:
    解决方案E: Unable to locate package ros-kinetic-rgbd-launch
    记一件无聊但有意思的小事
    硬件开发相关工具、名词备忘
    Verilog代码规范(持续更新)
    GIT简单使用——多人协作篇
    GIT简单使用——私人库篇
    调试Scrapy过程中的心得体会
    Selenium学习(三)Selenium总是崩溃的解决办法
    Selenium学习(二)入门小例子
    Selenium学习(一)环境搭建
  • 原文地址:https://www.cnblogs.com/naizui/p/5090338.html
Copyright © 2011-2022 走看看