Skip to content

Instantly share code, notes, and snippets.

@brutella
Created October 16, 2012 14:32
Show Gist options
  • Save brutella/3899619 to your computer and use it in GitHub Desktop.
Save brutella/3899619 to your computer and use it in GitHub Desktop.
NSUserDefaults macros
#define jn_defaults_get_object(key) [[NSUserDefaults standardUserDefaults] objectForKey:key]
#define jn_defaults_set_object(key, object) \
[[NSUserDefaults standardUserDefaults] setObject:object forKey:key]; \
[[NSUserDefaults standardUserDefaults] synchronize]; \
jn_defaults_post_notification(key)
#define jn_defaults_get_float(key) [jn_defaults_get_object(key) floatValue]
#define jn_defaults_set_float(key, float) jn_defaults_set_object(key, [NSNumber numberWithFloat:float])
#define jn_defaults_observe(key, block) \
[[NSNotificationCenter defaultCenter] addObserverForName:[NSString stringWithFormat:@"default_changed_%@", key] object:nil queue:[NSOperationQueue mainQueue] usingBlock:block]
#define jn_defaults_object_from_notification(notificationObject) \
[notificationObject.userInfo objectForKey:@"value"]
#define jn_defaults_get_bool(key) [jn_defaults_get_object(key) boolValue]
#define jn_defaults_set_bool(key, boolean) jn_defaults_set_object(key, [NSNumber numberWithBool:boolean])
#define jn_defaults_post_notification(defaults_key) \
[[NSNotificationCenter defaultCenter] postNotificationName:[NSString stringWithFormat:@"default_changed_%@", defaults_key] object:nil userInfo:[NSDictionary dictionaryWithObject:jn_defaults_get_object(defaults_key) forKey:@"value"]]
@brutella
Copy link
Author

Write less code when saving something to the NSUserDefaults

Save values to the user defaults

jn_defaults_set_object(@"user/email", @"alice@github.com");
jn_defaults_set_bool(@"user/logged-in", YES);

Read values

NSString *email = jn_defaults_get_object(@"user/email");
BOOL isUserLoggedIn = jn_defaults_get_bool(@"user/logged-in");

Observe values

jn_defaults_observe(@"user/email", ^(NSNotification *notification) {
    NSString *email = jn_defaults_object_from_notification(notification);
});

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment