JDUserDefaults.m 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. //
  2. // JDUserDefaults.m
  3. // JasonDevelop
  4. //
  5. // Created by Jason Lee on 2/4/15.
  6. // Copyright (c) 2015 JasonDevelop. All rights reserved.
  7. //
  8. #import "JDUserDefaults.h"
  9. @interface JDUserDefaults () {
  10. NSMutableDictionary *_userData;
  11. }
  12. @end
  13. @implementation JDUserDefaults
  14. - (id)initWithCoder:(NSCoder *)aDecoder {
  15. if (self = [super init])
  16. {
  17. _userData = [aDecoder decodeObjectForKey:@"userData"];
  18. }
  19. return self;
  20. }
  21. - (void)encodeWithCoder:(NSCoder *)coder
  22. {
  23. [coder encodeObject:_userData forKey:@"userData"];
  24. }
  25. - (void)setObject:(id)object forKey:(id<NSCopying>)aKey {
  26. if (object == nil) {
  27. object = [NSNull null];
  28. }
  29. [_userData setObject:object forKey:aKey];
  30. }
  31. - (void)removeObject:(id<NSCopying>)aKey {
  32. if (aKey == nil) {
  33. return;
  34. }
  35. [_userData removeObjectForKey:aKey];
  36. }
  37. - (id)objectForKey:(id)aKey {
  38. id object = [_userData objectForKey:aKey];
  39. return !object || [[NSNull null] isEqual:object] ? nil : object;
  40. }
  41. - (void)setBool:(BOOL)value forKey:(id<NSCopying>)aKey {
  42. [_userData setObject:value ? ksYES : ksNO forKey:aKey];
  43. }
  44. - (BOOL)boolForKey:(id)aKey {
  45. id obj = [_userData objectForKey:aKey];
  46. return obj ? [obj boolValue] : NO;
  47. }
  48. - (void)setInteger:(NSInteger)value forKey:(id<NSCopying>)aKey {
  49. [_userData setObject:[NSNumber numberWithInt:(int)value] forKey:aKey];
  50. }
  51. - (NSInteger)integerForKey:(id)aKey {
  52. id obj = [_userData objectForKey:aKey];
  53. return obj ? [obj integerValue] : NO;
  54. }
  55. - (void)synchronize {
  56. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  57. NSData *writeData = [NSKeyedArchiver archivedDataWithRootObject:_userData];
  58. [defaults setObject:writeData forKey:@"LOCAL_USER_DATA"];
  59. [defaults synchronize];
  60. }
  61. - (void)syncronizeObject:(id)object forKey:(id<NSCopying>)aKey {
  62. [self setObject:object forKey:aKey];
  63. [self synchronize];
  64. }
  65. #pragma mark - Singleton
  66. + (JDUserDefaults *)defaults {
  67. static JDUserDefaults *sharedUserDefaults = nil;
  68. static dispatch_once_t onceToken;
  69. dispatch_once(&onceToken, ^{
  70. sharedUserDefaults = [[self alloc] init];
  71. });
  72. return sharedUserDefaults;
  73. }
  74. - (id)init {
  75. if (self = [super init]) {
  76. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  77. NSData *dataLocal = [defaults objectForKey:@"LOCAL_USER_DATA"];
  78. _userData = [NSKeyedUnarchiver unarchiveObjectWithData:dataLocal];
  79. if (!_userData) {
  80. _userData = [NSMutableDictionary new];
  81. }
  82. }
  83. return self;
  84. }
  85. @end