0.3.0: changed the prefix method into a transformKey: method call [backwards incompatible]

This commit is contained in:
Kevin Renskers
2012-12-19 13:59:43 +00:00
parent bb03aed71f
commit 6e192c50d9
7 changed files with 33 additions and 27 deletions

View File

@@ -1,3 +1,6 @@
0.3.0 - December 19, 2012
- Changed the prefix method into a transformKey: method call [backwards incompatible]
0.2.0 - December 19, 2012
- Don't automatically synchronize in the setter
- Performance logging in the example app

View File

@@ -13,12 +13,12 @@
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSDictionary *defaults = @{
@"NSUSerDefault:userName": @"default",
@"NSUSerDefault:userId": @1
@"NSUserDefaultUserName": @"default",
@"NSUserDefaultUserId": @1
};
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userName"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userId"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserName"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserId"];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

View File

@@ -15,18 +15,18 @@
[super setUp];
NSDictionary *defaults = @{
@"NSUSerDefault:userName": @"default",
@"NSUSerDefault:userId": @1
@"NSUserDefaultUserName": @"default",
@"NSUserDefaultUserId": @1
};
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userName"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userId"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserName"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserId"];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
- (void)tearDown {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userName"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUSerDefault:userId"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserName"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"NSUserDefaultUserId"];
[super tearDown];
}
@@ -44,8 +44,8 @@
}
- (void)testGetters {
STAssertEqualObjects([GVUserDefaults standardUserDefaults].userName, [[NSUserDefaults standardUserDefaults] objectForKey:@"NSUSerDefault:userName"], nil);
STAssertEqualObjects([GVUserDefaults standardUserDefaults].userId, [[NSUserDefaults standardUserDefaults] objectForKey:@"NSUSerDefault:userId"], nil);
STAssertEqualObjects([GVUserDefaults standardUserDefaults].userName, [[NSUserDefaults standardUserDefaults] objectForKey:@"NSUserDefaultUserName"], nil);
STAssertEqualObjects([GVUserDefaults standardUserDefaults].userId, [[NSUserDefaults standardUserDefaults] objectForKey:@"NSUserDefaultUserId"], nil);
}
@end

View File

@@ -10,8 +10,9 @@
@implementation GVUserDefaults (Properties)
- (NSString *)prefix {
return @"NSUSerDefault:";
- (NSString *)transformKey:(NSString *)key {
key = [key stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[key substringToIndex:1] uppercaseString]];
return [NSString stringWithFormat:@"NSUserDefault%@", key];
}
@dynamic userName;

View File

@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = "GVUserDefaults"
s.version = "0.2.0"
s.version = "0.3.0"
s.summary = "NSUserDefaults access via properties."
s.homepage = "https://github.com/gangverk/GVUserDefaults"
s.license = 'MIT'

View File

@@ -21,7 +21,7 @@
+ (BOOL)resolveInstanceMethod:(SEL)aSEL {
NSString *method = NSStringFromSelector(aSEL);
if ([method isEqualToString:@"prefix"]) {
if ([method isEqualToString:@"transformKey"]) {
// Prevent endless loop for possibly non-existing prefix method
return [super resolveInstanceMethod:aSEL];
}
@@ -35,16 +35,17 @@
}
}
- (NSString *)getPrefix {
if ([self respondsToSelector:@selector(prefix)]) {
return [self performSelector:@selector(prefix)];
- (NSString *)_transformKey:(NSString *)key {
if ([self respondsToSelector:@selector(transformKey:)]) {
return [self performSelector:@selector(transformKey:) withObject:key];
}
return @"";
return key;
}
id accessorGetter(id self, SEL _cmd) {
NSString *key = [NSString stringWithFormat:@"%@%@", [self getPrefix], NSStringFromSelector(_cmd)];
NSString *key = NSStringFromSelector(_cmd);
key = [self _transformKey:key];
return [[NSUserDefaults standardUserDefaults] objectForKey:key];
}
@@ -52,7 +53,7 @@ void accessorSetter(id self, SEL _cmd, id newValue) {
NSString *method = NSStringFromSelector(_cmd);
NSString *key = [[method stringByReplacingCharactersInRange:NSMakeRange(0, 3) withString:@""] stringByReplacingOccurrencesOfString:@":" withString:@""];
key = [key stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[key substringToIndex:1] lowercaseString]];
key = [NSString stringWithFormat:@"%@%@", [self getPrefix], key];
key = [self _transformKey:key];
// Set value of the key anID to newValue
[[NSUserDefaults standardUserDefaults] setObject:newValue forKey:key];

View File

@@ -27,18 +27,19 @@ You can even save defaults by setting the property:
At this moment only objects can be stored, so no integers or booleans. Just wrap them in an NSNumber.
### Key prefix
The keys in NSUserDefaults are the same name as your properties. If you'd like to prefix them, add a `prefix` method to your category:
The keys in NSUserDefaults are the same name as your properties. If you'd like to prefix or alter them, add a `transformKey:` method to your category. For example, to turn "userName" into "NSUserDefaultUserName":
- (NSString *)prefix {
return @"NSUSerDefault:";
- (NSString *)transformKey:(NSString *)key {
key = [key stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[key substringToIndex:1] uppercaseString]];
return [NSString stringWithFormat:@"NSUserDefault%@", key];
}
### Registering defaults
Registering defaults is done as usual, on NSUserDefaults directly (use the same prefix, if any!).
NSDictionary *defaults = @{
@"NSUSerDefault:userName": @"default",
@"NSUSerDefault:userId": @1
@"NSUSerDefaultUserName": @"default",
@"NSUSerDefaultUserId": @1
};
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];