diff --git a/NSObject+NSCoding.m b/NSObject+NSCoding.m index d64f433..d04a072 100644 --- a/NSObject+NSCoding.m +++ b/NSObject+NSCoding.m @@ -38,7 +38,11 @@ - (void)encodeAutoWithCoder:(NSCoder *)aCoder class:(Class)class for (int i = 0; i < outCount; i++) { objc_property_t property = pt[i]; NSString *name = [NSString stringWithUTF8String:property_getName(property)]; - + + if (![self shouldEncodePropertyName:name]) { + continue; + } + SEL selector = NSSelectorFromString(name); Method mt = class_getInstanceMethod(class, selector); if (mt != NULL) { @@ -108,7 +112,11 @@ - (void)decodeAutoWithAutoCoder:(NSCoder *)aDecoder class:(Class)class for (int i = 0; i< outCount; i++) { objc_property_t property = pt[i]; NSString *name = [NSString stringWithUTF8String:property_getName(property)]; - + + if (![self shouldEncodePropertyName:name]) { + continue; + } + SEL selector = NSSelectorFromString([class getSetMethodName:name]); Method mt = class_getInstanceMethod(class, selector); if (mt != NULL) { @@ -182,6 +190,15 @@ - (void)decodeAutoWithAutoCoder:(NSCoder *)aDecoder #pragma mark - private +- (BOOL)shouldEncodePropertyName:(NSString *)name { + // Ignore properties indrocuded with iOS 8 + if ([@[@"description", @"debugDescription", @"superclass"] containsObject:name]) { + return NO; + } + + return YES; +} + + (NSString *)getMethodReturnType:(Method)mt { char dstType[10] = {0};