实现字典和对象转换的工具类
2015-08-21 20:56
323 查看
#import <Foundation/Foundation.h> @interface EntityHelper : NSObject //字典对象转为实体对象 + (void) dictionaryToEntity:(NSDictionary *)dict entity:(NSObject*)entity; //实体对象转为字典对象 + (NSDictionary *) entityToDictionary:(id)entity; @end
#import "EntityHelper.h" #import <objc/runtime.h> @implementation EntityHelper + (void) dictionaryToEntity:(NSDictionary *)dict entity:(NSObject*)entity { if (dict && entity) { for (NSString *keyName in [dict allKeys]) { //构建出属性的set方法 NSString *destMethodName = [NSString stringWithFormat:@"set%@:",[keyName capitalizedString]]; //capitalizedString返回每个单词首字母大写的字符串(每个单词的其余字母转换为小写) SEL destMethodSelector = NSSelectorFromString(destMethodName); if ([entity respondsToSelector:destMethodSelector]) { [entity performSelector:destMethodSelector withObject:[dict objectForKey:keyName]]; } }//end for }//end if } + (NSDictionary *) entityToDictionary:(id)entity { Class clazz = [entity class]; u_int count; objc_property_t* properties = class_copyPropertyList(clazz, &count); NSMutableArray* propertyArray = [NSMutableArray arrayWithCapacity:count]; NSMutableArray* valueArray = [NSMutableArray arrayWithCapacity:count]; for (int i = 0; i < count ; i++) { objc_property_t prop=properties[i]; const char* propertyName = property_getName(prop); [propertyArray addObject:[NSString stringWithCString:propertyName encoding:NSUTF8StringEncoding]]; // const char* attributeName = property_getAttributes(prop); // NSLog(@"%@",[NSString stringWithUTF8String:propertyName]); // NSLog(@"%@",[NSString stringWithUTF8String:attributeName]); id value = [entity performSelector:NSSelectorFromString([NSString stringWithUTF8String:propertyName])]; if(value ==nil) [valueArray addObject:[NSNull null]]; else { [valueArray addObject:value]; } // NSLog(@"%@",value); } free(properties); NSDictionary* returnDic = [NSDictionary dictionaryWithObjects:valueArray forKeys:propertyArray]; // NSLog(@"%@", returnDic); return returnDic; } @end
相关文章推荐
- CQOI2013 棋盘游戏
- Thinking in java 之'数据初始化'
- Convert Sorted List to Binary Search Tree
- 你应该掌握的七种回归技术
- 为什么button在设置标题时要用一个方法,而不像lable一样直接用一个属性
- js内置对象(概念)
- hdu 1058 Humble Numbers(dp)
- hdu1021Fibonacci Again
- UIKit类图
- 实现微博@@@
- 一点学习链接(来自学堂在线)
- 【面试】C\C++程序基础1
- 九度OJ 题目1209:最小邮票数
- 将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete
- 【Python爬虫学习笔记(1)】urllib2库相关知识点总结
- 关于超链接伪类的使用,:link,:visited,:hover
- 显示图片,VS2010, MFC, OpenCV2
- WordPress安装折腾
- 平衡二叉树的实现代码
- UVA 1658 - Admiral (拆点+最小费用流)