Changeset 3192
- Timestamp:
- 08/15/05 13:37:27 (3 years ago)
- Files:
-
- ZankaAdditions/trunk/ZASettings.h (modified) (1 diff)
- ZankaAdditions/trunk/ZASettings.m (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
ZankaAdditions/trunk/ZASettings.h
r3123 r3192 28 28 29 29 @interface ZASettings : ZAObject { 30 NSString *_identifier; 30 31 NSMutableDictionary *_settings; 32 id _defaults; 31 33 NSRecursiveLock *_lock; 32 34 } 33 35 34 36 37 + (void)loadWithIdentifier:(NSString *)identifier; 35 38 + (NSDictionary *)defaults; 36 39 ZankaAdditions/trunk/ZASettings.m
r3190 r3192 32 32 33 33 + (id)_settings; 34 + (id)_settingsWithIdentifier:(NSString *)identifier; 35 - (id)_initWithIdentifier:(NSString *)identifier; 34 36 35 37 - (void)_setObject:(id)object forKey:(id)key; 36 38 - (id)_objectForKey:(id)key; 37 39 40 - (void)_synchronize; 41 - (void)_synchronizeLocked; 42 38 43 @end 39 44 … … 42 47 43 48 + (id)_settings { 44 static id sharedSettings; 49 return [self _settingsWithIdentifier:NULL]; 50 } 51 52 53 54 + (id)_settingsWithIdentifier:(NSString *)identifier { 55 static id sharedSettings; 45 56 46 57 if(!sharedSettings) 47 sharedSettings = [[self alloc] init];58 sharedSettings = [[self alloc] _initWithIdentifier:identifier]; 48 59 49 60 return sharedSettings; … … 52 63 53 64 65 - (id)_initWithIdentifier:(NSString *)identifier { 66 NSDictionary *defaultValues; 67 NSString *key; 68 NSEnumerator *enumerator; 69 BOOL synchronize = NO; 70 id object; 71 72 self = [super init]; 73 74 _lock = [[NSRecursiveLock alloc] init]; 75 _settings = [[NSMutableDictionary alloc] init]; 76 77 if(identifier) { 78 _identifier = [identifier retain]; 79 _defaults = [[[NSUserDefaults standardUserDefaults] persistentDomainForName:_identifier] mutableCopy]; 80 81 if(!_defaults) 82 _defaults = [[NSMutableDictionary alloc] init]; 83 } else { 84 _defaults = [NSUserDefaults standardUserDefaults]; 85 } 86 87 defaultValues = [[self class] defaults]; 88 enumerator = [defaultValues keyEnumerator]; 89 90 while((key = [enumerator nextObject])) { 91 object = [_defaults objectForKey:key]; 92 93 if(!object) { 94 object = [defaultValues objectForKey:key]; 95 96 if([object isKindOfPropertyListSerializableClass]) 97 [_defaults setObject:object forKey:key]; 98 else 99 [_defaults setObject:[NSArchiver archivedDataWithRootObject:object] forKey:key]; 100 101 synchronize = YES; 102 } 103 104 if([object isKindOfClass:[NSData class]]) { 105 object = [NSUnarchiver unarchiveObjectWithData:object]; 106 107 if(object) 108 [_settings setObject:object forKey:key]; 109 } else { 110 [_settings setObject:object forKey:key]; 111 } 112 } 113 114 if(synchronize) 115 [self _synchronize]; 116 117 return self; 118 } 119 120 121 54 122 #pragma mark - 55 123 56 124 - (void)_setObject:(id)object forKey:(id)key { 57 NSUserDefaults *defaults; 58 59 defaults = [NSUserDefaults standardUserDefaults]; 125 [_lock lock]; 60 126 61 127 if([object isKindOfPropertyListSerializableClass]) 62 [ defaults setObject:object forKey:key];128 [_defaults setObject:object forKey:key]; 63 129 else 64 [defaults setObject:[NSArchiver archivedDataWithRootObject:object] forKey:key]; 65 66 [_lock lock]; 130 [_defaults setObject:[NSArchiver archivedDataWithRootObject:object] forKey:key]; 131 67 132 [_settings setObject:object forKey:key]; 133 68 134 [_lock unlock]; 69 135 70 [ defaults performSelectorOnce:@selector(synchronize) withObject:NULL afterDelay:0.1];136 [self performSelectorOnce:@selector(_synchronizeLocked) withObject:NULL afterDelay:1.0]; 71 137 } 72 138 … … 83 149 } 84 150 151 152 153 #pragma mark - 154 155 - (void)_synchronize { 156 NSUserDefaults *defaults; 157 158 defaults = [NSUserDefaults standardUserDefaults]; 159 160 if(_identifier) { 161 [defaults removePersistentDomainForName:_identifier]; 162 [defaults setPersistentDomain:_defaults forName:_identifier]; 163 } 164 165 [defaults synchronize]; 166 } 167 168 169 170 - (void)_synchronizeLocked { 171 [_lock lock]; 172 [self _synchronize]; 173 [_lock unlock]; 174 } 175 85 176 @end 86 177 … … 88 179 89 180 @implementation ZASettings 181 182 + (void)loadWithIdentifier:(NSString *)identifier { 183 (void) [[self class] _settingsWithIdentifier:identifier]; 184 } 185 186 90 187 91 188 + (NSDictionary *)defaults { … … 95 192 96 193 97 - (id)init {98 NSUserDefaults *defaults;99 NSDictionary *defaultValues;100 NSString *key;101 NSEnumerator *enumerator;102 id object;103 104 self = [super init];105 106 _settings = [[NSMutableDictionary alloc] init];107 _lock = [[NSRecursiveLock alloc] init];108 109 defaultValues = [[self class] defaults];110 defaults = [NSUserDefaults standardUserDefaults];111 enumerator = [defaultValues keyEnumerator];112 113 while((key = [enumerator nextObject])) {114 object = [defaults objectForKey:key];115 116 if(!object) {117 object = [defaultValues objectForKey:key];118 119 if([object isKindOfPropertyListSerializableClass])120 [defaults setObject:object forKey:key];121 else122 [defaults setObject:[NSArchiver archivedDataWithRootObject:object] forKey:key];123 }124 125 if([object isKindOfClass:[NSData class]]) {126 object = [NSUnarchiver unarchiveObjectWithData:object];127 128 if(object)129 [_settings setObject:object forKey:key];130 }131 else {132 [_settings setObject:object forKey:key];133 }134 }135 136 return self;137 }138 139 140 141 194 #pragma mark - 142 195
