开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜