New file |
| | |
| | | // |
| | | // 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 |