JDUserDefaults.m 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. - (id)objectForKey:(id)aKey {
  32. id object = [_userData objectForKey:aKey];
  33. return !object || [[NSNull null] isEqual:object] ? nil : object;
  34. }
  35. - (void)setBool:(BOOL)value forKey:(id<NSCopying>)aKey {
  36. [_userData setObject:value ? ksYES : ksNO forKey:aKey];
  37. }
  38. - (BOOL)boolForKey:(id)aKey {
  39. id obj = [_userData objectForKey:aKey];
  40. return obj ? [obj boolValue] : NO;
  41. }
  42. - (void)setInteger:(NSInteger)value forKey:(id<NSCopying>)aKey {
  43. [_userData setObject:[NSNumber numberWithInt:(int)value] forKey:aKey];
  44. }
  45. - (NSInteger)integerForKey:(id)aKey {
  46. id obj = [_userData objectForKey:aKey];
  47. return obj ? [obj integerValue] : NO;
  48. }
  49. - (void)synchronize {
  50. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  51. NSData *writeData = [NSKeyedArchiver archivedDataWithRootObject:_userData];
  52. [defaults setObject:writeData forKey:@"LOCAL_USER_DATA"];
  53. [defaults synchronize];
  54. }
  55. - (void)syncronizeObject:(id)object forKey:(id<NSCopying>)aKey {
  56. [self setObject:object forKey:aKey];
  57. [self synchronize];
  58. }
  59. #pragma mark - Singleton
  60. + (JDUserDefaults *)defaults {
  61. static JDUserDefaults *sharedUserDefaults = nil;
  62. static dispatch_once_t onceToken;
  63. dispatch_once(&onceToken, ^{
  64. sharedUserDefaults = [[self alloc] init];
  65. });
  66. return sharedUserDefaults;
  67. }
  68. - (id)init {
  69. if (self = [super init]) {
  70. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  71. NSData *dataLocal = [defaults objectForKey:@"LOCAL_USER_DATA"];
  72. _userData = [NSKeyedUnarchiver unarchiveObjectWithData:dataLocal];
  73. if (!_userData) {
  74. _userData = [NSMutableDictionary new];
  75. }
  76. }
  77. return self;
  78. }
  79. @end