Day 48: Guest Post: NSUserDefaults
Today’s post is the first guest post to appear on 365Cocoa. This snippet was suggested by Pierre Bernard from houdah.com, many thanks to him for suggesting it. He has two tricks to share about NSUserDefaults:
- Category on NSUserDefaults to send out KVO notifications. Needed on iPhone where there is no NSUserDefaultsController
- Use of #define to create setters and getters
@implementation NSUserDefaults (DefaultsManager)
#define DefaultsGetter(defaultType, defaultName) \
defaultType result = [self objectForKey:defaultName]; \
return result;
#define DefaultsSetter(defaultType, defaultName, value) \
[self willChangeValueForKey:defaultName]; \
if (value != nil) { \
[self setObject:value forKey:defaultName]; \
} \
else { \
[self removeObjectForKey:defaultName]; \
} \
[self didChangeValueForKey:defaultName];
- (NSDictionary*)currentEngine
{
DefaultsGetter(NSDictionary*, kCurrentEngineKey);
}
- (void)setCurrentEngine:(NSDictionary*)currentEngine
{
DefaultsSetter(NSDictionary*, kCurrentEngineKey, [[currentEngine copy] autorelease]);
}
@end
Again I want to thank him for suggesting it and if you have something to share yourself, I’ll be happy to post it here in the same way. Another guest post is coming up tomorrow by the way.