zoukankan      html  css  js  c++  java
  • KVC的用法

    试着用一种极为简单的例子来探索下KVC的用法,看完本文,相信会对大家的KVC的认识有一定的帮助.注意看代码.


    KVC,即:Key-value coding,它是一种使用字符串标识符,间接访问对象属性的机制,它是很多技术的基础。

    主要的方法就两个,setValue:forKey(setValuesForKeysWithDictionary),valueForKey.

    主要用于Datamodel中的数据处理.使用该方法可以大大的简化代码,直接访问赋值model类中的属性的值.其中setvalue forkey 相当于setter方法.valueforkey相当于getter方法.以下为简单的使用实例.

    创建一个Person类.也就是我们常用的dataModel类.

    #import <Foundation/Foundation.h>
    #import "A.h"
    @interface Person : NSObject
    {
        NSString *_name;
        int _age;
        NSString *_sex;
        A *_a;
    }
    - (void)sayHi;
    
    
    @end
    以下为.m文件

    #import "Person.h"
    
    @implementation Person
    
    - (void)dealloc
    {
        [_name release];
        [_sex release];
        [super dealloc];
    }
    -(void)setValue:(id)value forUndefinedKey:(NSString *)key
    {
    //     NSLog(@"key==%@",key);
    }
    - (void)sayHi
    {
        NSLog(@"name = %@ age = %d sex = %@ ",_name,_age,_sex);
        [_a ss];
    }
    @end
    
    其中的setValue:forUndefindeKey:方法用来告诉系统使用setValue:forKey: 寻找不到key的时候,通知系统不必报错.

    #import <Foundation/Foundation.h>
    
    @interface A : NSObject
    {
        NSString *_test;
    }
    
    - (void)ss;
    
    @end
    
    #import "A.h"
    
    @implementation A
    - (void)dealloc
    {
        [_test release];
        [super dealloc];
    }
    
    - (void)ss
    {
        NSLog(@"+++%@",_test);
    }
    @end
    



    以下为实现.其中我的plist文件为一个字典里面有多个数组,每个数组中包含多个字典

    NSString *file = [[NSBundle mainBundle] pathForResource:@"PersonData" ofType:@"plist"];
        NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:file];
        NSDictionary *d = [[dic objectForKey:@"C"]objectAtIndex:0];
        Person *p = [[Person alloc] init];
        [p setValuesForKeysWithDictionary:d];
        
        [p setValue:@"LiSi" forKey:@"name"];
        [p setValue:@"nan" forKey:@"sex"];
        [p setValue:[NSNumber numberWithInt:20] forKey:@"age"];
        
        
        A *aaa = [[A alloc] init];
        //NSLog(@"%@",aaa);
        [p setValue:aaa forKey:@"a"];
        [p setValue:@"haha" forKeyPath:@"a.test"];
        NSLog(@"-----%@",[p valueForKey:@"sex"]);
        [p sayHi];
    


  • 相关阅读:
    mysql的数据类型和字段属性
    随便弄个名字 以后改
    drupal 不错的网址
    iwebshop 模板手册
    1.nginx 防注入
    DenyHosts 安装及配置详解
    drupal8 管理入门
    1.php代码块
    Drupal Nginx伪静态设置方法
    Nginx优化(十七)
  • 原文地址:https://www.cnblogs.com/xukunhenwuliao/p/3576257.html
Copyright © 2011-2022 走看看