// // NSObject+MJCoding.m // MJExtension // // Created by mj on 14-1-15. // Copyright (c) 2014年 小码哥. All rights reserved. // #import "NSObject+MJCoding.h" #import "NSObject+MJClass.h" #import "NSObject+MJProperty.h" #import "MJProperty.h" @implementation NSObject (MJCoding) - (void)mj_encode:(NSCoder *)encoder { Class clazz = [self class]; NSArray *allowedCodingPropertyNames = [clazz mj_totalAllowedCodingPropertyNames]; NSArray *ignoredCodingPropertyNames = [clazz mj_totalIgnoredCodingPropertyNames]; [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { // 检测是否被忽略 if (allowedCodingPropertyNames.count && ![allowedCodingPropertyNames containsObject:property.name]) return; if ([ignoredCodingPropertyNames containsObject:property.name]) return; id value = [property valueForObject:self]; if (value == nil) return; [encoder encodeObject:value forKey:property.name]; }]; } - (void)mj_decode:(NSCoder *)decoder { Class clazz = [self class]; NSArray *allowedCodingPropertyNames = [clazz mj_totalAllowedCodingPropertyNames]; NSArray *ignoredCodingPropertyNames = [clazz mj_totalIgnoredCodingPropertyNames]; [clazz mj_enumerateProperties:^(MJProperty *property, BOOL *stop) { // 检测是否被忽略 if (allowedCodingPropertyNames.count && ![allowedCodingPropertyNames containsObject:property.name]) return; if ([ignoredCodingPropertyNames containsObject:property.name]) return; id value = [decoder decodeObjectForKey:property.name]; if (value == nil) { // 兼容以前的MJExtension版本 value = [decoder decodeObjectForKey:[@"_" stringByAppendingString:property.name]]; } if (value == nil) return; [property setValue:value forObject:self]; }]; } @end