IOS字典快速转换为Model模型

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一般情况下IOS得局部页面加载的过程是,创建一个Model然后,将Nib文件与Model进行关联,然后能够快速的获取到Nib文件上的控件实例。操作生成页面。

但是原生的内容是没有直接通过Json获取Model只能生成字典。然后转换为Model。下列方法就是通过字典来转换为Model的过程。

首先是要添加对应的使用的头文件#import<objc/runtime.h>

然后添加下面几个方法

Model从字典中填充数据

/** 从字典中填充数据*/-(int)reflectDataFromDictionary:(NSDictionary *)dic

{

unsignedintuseCount ,outCount;

Ivar*ivars = class_copyIvarList([selfclass], &outCount);for(constIvar *p = ivars; p < ivars + outCount; p++) {

Ivarconstivar = *p;//获取变量名NSString *varName =[NSString stringWithUTF8String:ivar_getName(ivar)];//获取变量值idvarValue =[self valueForKey:varName];//如果是直接包含此名称的if([dic.allKeys containsObject:varName]) {

varValue=[dic objectForKey:varName];

useCount++;

}else{

NSString*tmp_varName =[self removeFirstUnderlined:varName];if([dic.allKeys containsObject:tmp_varName]) {

varValue=[dic objectForKey:tmp_varName];

useCount++;

}

}

[self setValue:varValue forKey:varName];

}returnuseCount;

}

两个辅助方法

/** 移除掉第一个下划线*/-(NSString *)removeFirstUnderlined:(NSString *)str

{if([[str substringToIndex:1] isEqual:@"_"]) {return[str substringFromIndex:1];

}returnstr;

}/** 获取所有属性*/- (NSArray*)PRopertyKeys

{

unsignedintoutCount, i;

objc_property_t*properties = class_copyPropertyList([selfclass], &outCount);

NSMutableArray*keys =[[NSMutableArray alloc] initWithCapacity:outCount];for(i =0; i < outCount; i++) {

objc_property_t property=properties[i];

NSString*propertyName =[[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];

[keys addObject:propertyName];

}

free(properties);returnkeys;

}

将Model转换为字典

/** 转换为字典*/-(NSDictionary *)convertToDictionary

{

NSMutableDictionary*dic =[[NSMutableDictionary alloc] init];for(NSString *keyin[self propertyKeys]) {idpropertyValue =[self valueForKey:key];

[dic setObject:propertyValue forKey:key];

}returndic;

}

抽空写了一个Demo出来,GitHub死活上传不上去,所以放到CSDN上去了。如果需要的话可以Down下来看看http://download.csdn.net/detail/anxin1225/8190975

然后,就没有然后了……

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航