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;

    }

     

  • 相关阅读:
    redis命令
    linux命令行任务管理
    tomcat修改内存
    Python调用shell
    取消myeclipse自动进入workspace
    解决Myeclipse编译不生成.class文件问题
    Manacher回文串算法学习记录
    青少年如何使用 Python 开始游戏开发
    对 Linux 专家非常有用的 20 个命令
    对中级 Linux 用户非常有用的 20 个命令
  • 原文地址:https://www.cnblogs.com/naizui/p/5090338.html
Copyright © 2011-2022 走看看