您的位置:首页 > 其它

实现字典和对象转换的工具类

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: