zoukankan      html  css  js  c++  java
  • runtime使用技巧二

    接着上一篇讲解runtime反射属性的用法

    runtime反射属性列表:

      在很多时候,Android和IOS经常需要在程序中生成一个列表,并且列表中数据格式什么的基本相同。Android还好一点,谷歌的Gson很完美的解决了解析的问题. 前提是你需要生成一个跟你的借口返回数据完全相同的model,这在Android开发中是提高速率非常简洁有效的方法,并且减少了自用解析的繁琐过程和中间出现的一些问题。

      但在IOS中我们经常在http之后获得的数据为字典型的,如何把字典型的array转变为model型的array(方便给cell赋值,相信大家都懂得)就成为一个非常“痛苦的过程”,数据少还好一点,数据多得时候。。。 这种过程既没有技术含量,而且是繁复的必须的。那么怎么样来解决这个问题那。下面进入今天的话题: IOS类GSON处理

    首先我在NSDictionary的类别中申明一个方法

    #import <objc/runtime.h> 记得添加,人家是主角

    @interface NSDictionary (getModelArray)
    -(NSMutableArray *)getModelWithKey:(NSString *)key ClassName:(NSString *)name;
    @end

    然后我们。。。直接上代码

    @implementation NSDictionary (getModelArray)
    
    -(NSMutableArray *)getModelWithKey:(NSString *)key ClassName:(NSString *)name{
        unsigned int outCount, i,j;
        objc_property_t *properties = class_copyPropertyList(NSClassFromString(name), &outCount);
        NSMutableArray * arr = [NSMutableArray arrayWithArray:[self valueForKey:key]];
        NSMutableArray * arrResult = [[[NSMutableArray alloc] init] autorelease];
        for (i=0;i<arr.count;i++) {
            id obj = [[NSClassFromString(name) alloc] init];
            for (j=0; j<outCount; j++) {
                objc_property_t property = properties[j];
                NSString * keyName = [[NSString alloc]initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
                [obj setValue:[[arr objectAtIndex:i] valueForKey:keyName] forKey:keyName];
                [keyName release];
            }
            [arrResult addObject:obj];
            [obj release];
        }
        NSLog(@"
    成功转换实体类:%@
    关键字:%@
    数量:%d",name,key,arrResult.count);
        return arrResult;
    }

    然后在从http请求回来之后,对字典调用 上面该方法,传入想要解析的字典中array的key值,和想要转换得model类型的名称,然后你就会得到一个array,而里面全是你需要的model是不是很爽呢。。。注意:model中得属性需要和接返回的属性名称保持一直,不然model中得会出现有的值为nil  。。

    附下效果

    在http之后调用

            if (![[dic valueForKey:@"delegatess"isKindOfClass:[NSNullclass]]) {

                self.arrData = [dic getModelWithKey:@"delegatess"ClassName:@"AgentDetailsModel"];

            }

    2014-05-07 13:46:16.761 SouFun[4433:90b] 

    成功转换实体类:AgentDetailsModel

    关键字:delegatess

    数量:1

  • 相关阅读:
    EF的连表查询Lambda表达式和linq语句
    C#.NET里面抽象类,接口,虚方法
    ASP.Net WebAPI的返回值
    IHttpActionResult不识别解决办法
    web api 开发之 filter
    SQL语句大全教程
    ASP.NET Web API 跨域访问(CORS)要注意的地方
    铁乐学python_shelve模块详解
    铁乐学python_day25_序列化模块
    铁乐学python_day24_面向对象进阶1_内置方法
  • 原文地址:https://www.cnblogs.com/ggxbq/p/3713725.html
Copyright © 2011-2022 走看看