4

我看过一些指南说要这样做,而另一些指南则说以这种方式设置 NSUserDefaults 的初始值和键会在更新应用程序时导致问题。我希望我能在这里明确地回答这个问题。在我的 appdelegate didFinishLaunchingWithOptions 方法中,我有:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if (![defaults integerForKey:@"totalDays"]) {

        // if there is no value for the key, set it to 1
        [defaults setInteger:0 forKey:@"totalDays"];

    }
    if (![defaults objectForKey:@"currentDate"]) {
        [defaults setObject:@"32 01" forKey:@"currentDate"];
    }
    if (! [defaults boolForKey:@"marked"]) {
        [defaults setBool:NO forKey:@"marked"];

    }
    if (![defaults arrayForKey:@"checkedrows"]) {
        NSMutableArray *arr1  = [NSMutableArray arrayWithArray:[defaults arrayForKey:@"checkedrows"]];
    }
[defaults synchronize];
4

3 回答 3

2

注意也可能会有所帮助,您不需要“需要”默认值来使用它们。它可能会节省您稍后在应用程序中检查它们的空值或零值的时间。

正如另一个答案所述,一旦将值保存为用户默认值,它应该从更新到更新以及从备份到备份持续存在。我多年来一直在使用它们,没有丢失或损坏数据的问题。

于 2012-12-19T14:20:24.300 回答
1

您根本不应该设置默认值!相反,使用 NSUserDefaults 提供的方便的方法来实现这个目的:-registerDefaults:。在程序启动的早期使用默认值字典调用它。

这样做的好处是,因为 -registerDefaults: 是瞬态的,您可以区分“用户尚未自定义此首选项”和“用户明确将此首选项设置为默认值”之间的区别,如果您更改默认值,这一点很重要在较新版本的程序中设置。由于不需要保存到磁盘,它也快一点。

于 2012-12-29T18:22:07.017 回答
1

如果用户更新应用程序,则会保存存储在用户默认值中的数据。更新后您的代码不会出现任何问题。

于 2012-12-19T14:17:19.957 回答