Why doesn't my implementation of NSUserDefaults work under iOS 4?
I've read and watched many tutorials on NSUserDefaults
in the iPhone OS/iOS SDK, but I can't seem to get my own implementation working.
Right now, I'm building a simple counting application that I'd like to have load the last counted number when the application loads. However, NSUserDefaults
has a different idea in mind. Does anyone know why my preference loading method keeps returning (null)
in an NSLog
?
Thanks in advance! :)
CounterViewController.m (abridged)
- (void)viewDidLoad {
// yadda yadda yadda interface setup here...
if ([self retrieveCount] == 0) {
count = 0;
} else {
count = [self retrieveCount];
NSString *temp = [[NSString alloc] initWithFormat:@"%@", count];
[label setText:temp];
[temp release];
}
[super viewDidLoad];
}
int count = 123; //whatever it might be when the user exits the application, set every time the "+" or "-" is tapped
- (void)writeCount {
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setInteger:c开发者_JAVA百科ount forKey:@"countKey"];
[prefs synchronize];
}
- (int)retrieveCount {
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs synchronize];
int loaded = [prefs integerForKey:@"countKey"];
NSLog(@"%@", loaded);
return loaded;
}
CounterAppDelegate.m
- (void)applicationWillTerminate:(UIApplication *)application {
/*
Called when the application is about to terminate.
See also applicationDidEnterBackground:.
*/
[CountrViewController writeCount];
}
(Since I'll only be retrieving a value from one key, I decided to not have any input into the method.)
If this is confusing in any way, please let me know! I'll be glad to provide clarification.
First off, you don't need to call -synchronize
before you read from the defaults, only after you've written to them.
Your NSLog
may actually be the culprit here—try %d
rather than %@
. %@
is for printing objects, like an NSString
or an NSNumber
; an int
is a primitive type.
精彩评论