iOS里CoreData model通过Dictionary快速赋值与取值

今天遇到一个问题,从服务器端传来的json数据,在ios里面被解析成了NSArray和NSDictionary,当用于CoreData时,需要对应转换赋值,有时也需要从一个model转化为一个字典,原本为一个个属性手动赋值的,现在感觉这种方法太笨了,联想到java和python里的反射,想想objective-c也应有这种api,写了一个NSManageObject的分类


@implementation NSManagedObject (toDictionary)


- (void)setWithDictionary:(NSDictionary *)dictionary {
    
    


    for (NSString *key in [dictionary keyEnumerator]) {

        
        NSString * methodName = [NSString stringWithFormat:@"set%@:", [key capitalizedString]];



        SEL selector = NSSelectorFromString(methodName);

        if ([self respondsToSelector:selector]) {

            [self performSelector:selector withObject:[dictionary objectForKey:key]];
        }
    }


}

上面是用字典给一个model赋值,通过遍历字典里的key,调用对应的setter方法来给model赋值


- (NSDictionary *)getDictionary
{


    NSMutableDictionary *mutableDictionary = [NSMutableDictionary new];


    unsigned int nCount = 0;

    objc_objectptr_t *popertylist = class_copyPropertyList([self class], &nCount);


    for (int i = 0; i < nCount; i++) {

        objc_objectptr_t property = popertylist[i];

        NSString *attr_name = [NSString stringWithUTF8String:property_getName(property)];



        SEL selector = NSSelectorFromString(attr_name);

        if ([self respondsToSelector:selector]) {
            NSLog(@"%@",[self performSelector:selector]);
            [mutableDictionary setObject:[self performSelector:selector] forKey:attr_name];
        }

    }

    return [[NSDictionary alloc] initWithDictionary:mutableDictionary];

}
@end

上面为把一个model转化为一个字典,属性名对应key,属性值对应value,通过objective-c的反射机制实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值