zoukankan      html  css  js  c++  java
  • iOS 字典转模型 KVC 实现

    字典转模型 KVC 实现

    1. KVC 字典转模型弊端:必须保证,模型中的属性和字典中的key 一一对应。
    2. 如果不一致,就会调用[<Status 0x7fa74b545d60> setValue:forUndefinedKey:] 报key找不到的错。
    3. 分析:模型中的属性和字典的key不一一对应,系统就会调用setValue:forUndefinedKey:报错。
    4. 解决:重写对象的setValue:forUndefinedKey:,把系统的方法覆盖,就能继续使用KVC,字典转模型了。

      一: 如果你不想用第三方控件,感觉自由度太低,比较受限制,那么可以尝试这种方法,使用 KVC 机制的 如下方法

      - (void)setValuesForKeysWithDictionary:(NSDictionary *)keyedValues;

      二: 有的时候我们需要将字典里的数据类型转成我们模型需要的类型可以在-(void)setValue:(id)value forKey:(NSString *)key将value转换一下

    // 将所有的Number数据类型转换为字符串

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

    if ([value isKindOfClass:[NSNull class]]) {

    value=nil;

    else if ([value isKindOfClass:[NSArrayclass]]) {

    else {

    value = [NSStringstringWithFormat:@"%@",value];

    }

    [supersetValue:value forKey:key];

    }

    // 对特殊字符 id 进行处理
    - (void) setValue:(id)value forUndefinedKey:(NSString*)key {

    NSLog(@"Undefined Key: %@", key);

    }

    三: 如果我们还想要进行模型里的模型嵌套,或者模型里的模型数组或者其他处理怎么办? 
    在EmployeModel里面复写BaseModel里面的 setValueForKey比如我的EmployeModel里面还有个times 的字典数组,数组里面又是模型,单独处理。除此之外,我们还可以进行其他的一些数据微调处理。

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

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

    NSArray*arr = [(NSString*)value componentsSeparatedByString:@"-"];

    value = [arr componentsJoinedByString:@""];

    else if ([key isEqualToString:@"times"]) {

    NSMutableArray*retArr = [NSMutableArrayarray];

    for (int i = 0; i < ((NSArray*)value).count; i++)  {

    NSDictionary* aDayTimeDic  =  ((NSArray*)value)[i];

    TimeModel *aDayTime = [[TimeModel alloc]initWithDic:aDayTimeDic];

    [retArr addObject:aDayTime];

    }

    value = retArr;

    }

    [supersetValue:value forKey:key];

    }

  • 相关阅读:
    从业十余年谈谈对dotnet看法与坚持
    monodroid 调用 JNI Native 的一些问题
    application数据库连接池spring.datasource.type=com.alibaba.druid.pool.DruidDataSource报错
    IDEA创建Spring Boot项目无法连接http://start.spring.io 解决方法
    mysql安装和sqlyog,mysql缺少依赖
    idea配置本地maven
    idea2020v1.3设置中文
    java安装及javac报错解决方法
    微信小程序数组里的值修改,for循环修改数组内容
    微信小程序如何获取屏幕高度和宽度
  • 原文地址:https://www.cnblogs.com/diweinan/p/9717021.html
Copyright © 2011-2022 走看看