gngrwzrd

NSKeyedArchiver NSKeyedUnarchiver - Auto encode/decode

Apr 27th, 2014
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //NSCodingKeys.h
  2. #import <Foundation/Foundation.h>
  3. @protocol NSCodingKeys <NSObject>
  4. - (NSArray *) archiveKeys;
  5. @end
  6.  
  7. //NSKeyedArchiver+Additions.h
  8. #import <Foundation/Foundation.h>
  9. #import "NSCodingKeys.h"
  10. @interface NSKeyedArchiver (Additions)
  11. - (void) encodeEntireObject:(NSObject <NSCodingKeys> *) instance;
  12. @end
  13.  
  14. //NSKeyedArchiver+Additions.m
  15. #import "NSKeyedArchiver+Additions.h"
  16. @implementation NSKeyedArchiver (Additions)
  17. - (void) encodeEntireObject:(NSObject <NSCodingKeys> *) instance; {
  18.     NSArray * keys = [instance archiveKeys];
  19.     for(NSString * key in keys) {
  20.         id val = [instance valueForKey:key];
  21.         [self encodeObject:val forKey:key];
  22.     }
  23. }
  24. @end
  25.  
  26. //NSKeyedUnarchiver+Additions.h
  27. #import <Foundation/Foundation.h>
  28. #import "NSCodingKeys.h"
  29. @interface NSKeyedUnarchiver (Additions)
  30. - (void) decodeEntireObject:(NSObject <NSCodingKeys> *) instance;
  31. @end
  32.  
  33. //NSKeyedUnarchiver+Additions.m
  34. #import "NSKeyedUnarchiver+Additions.h"
  35. @implementation NSKeyedUnarchiver (Additions)
  36. - (void) decodeEntireObject:(NSObject <NSCodingKeys> *) instance; {
  37.     NSArray * keys = [instance archiveKeys];
  38.     for(NSString * key in keys) {
  39.         [instance setValue:[self decodeObjectForKey:key] forKey:key];
  40.     }
  41. }
  42. @end
  43.  
  44.  
  45. //ModelBase.h
  46. #import <Foundation/Foundation.h>
  47. #import "NSCodingKeys.h"
  48. #import "NSKeyedArchiver+Additions.h"
  49. #import "NSKeyedUnarchiver+Additions.h"
  50.  
  51. @interface SCModelBase : NSObject <NSCoding,NSCodingKeys>
  52. @end
  53.  
  54. //ModelBase.m
  55. #import "SCModelBase.h"
  56. @implementation SCModelBase
  57. - (id) initWithCoder:(NSCoder *)aDecoder {
  58.     self = [super init];
  59.     NSKeyedUnarchiver * un = (NSKeyedUnarchiver *)aDecoder;
  60.     [un decodeEntireObject:self];
  61.     return self;
  62. }
  63. - (void) encodeWithCoder:(NSCoder *)aCoder {
  64.     NSKeyedArchiver * ar = (NSKeyedArchiver *)aCoder;
  65.     [ar encodeEntireObject:self];
  66. }
  67. - (NSArray *) archiveKeys {
  68.     return @[];
  69. }
  70. - (void) setNilValueForKey:(NSString *)key {
  71. }
  72. - (void) setValue:(id)value forUndefinedKey:(NSString *)key {
  73. }
  74. @end
Advertisement
Add Comment
Please, Sign In to add comment