为什么我的NSUserDefaults的实现不能在iOS 4下运行?

时间:2010-08-14 03:02:25

标签: iphone ios4

我已经在iPhone OS / iOS SDK中阅读并观看了NSUserDefaults上的许多教程,但我似乎无法让自己的实现工作。

现在,我正在构建一个简单的计数应用程序,我希望在应用程序加载时加载最后计算的数字。 然而, NSUserDefaults有一个不同的想法。有谁知道为什么我的首选项加载方法会在(null)中继续NSLog

提前致谢! :)

CounterViewController.m (删节)

- (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:count 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];
}

(因为我只会从一个键中检索一个值,所以我决定不对该方法有任何输入。)

如果这有任何混淆,请告诉我!我很乐意提供澄清。

1 个答案:

答案 0 :(得分:3)

首先,只有在您写完默认值之后,才需要在读取默认值之前调用-synchronize。 您的NSLog实际上可能是此处的罪魁祸首 - 请尝试%d而不是%@%@用于打印对象,例如NSStringNSNumber; int是原始类型。