我已经看到一些指南要说这样做,而其他人说这样设置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];
答案 0 :(得分:2)
注意,您可能不需要“默认值”来使用它们。它可以节省您在应用程序中稍后检查它们为零或零值的时间。
正如另一个答案所述,一旦将值保存到用户默认值,它应该从更新到更新并备份到备份。多年来我一直在使用它们,没有数据丢失或损坏的问题。
答案 1 :(得分:1)
如果用户更新应用程序,则会保存存储在用户默认值中的数据。更新后,您的代码不会出现任何问题。
答案 2 :(得分:1)
您根本不应设置默认值!相反,使用NSUserDefaults提供的方便的方法正是为了这个目的:-registerDefaults:。在程序启动时尽早使用默认值字典调用它。
这样做的好处是因为-registerDefaults:是暂时的,你可以区分“用户没有自定义此首选项”和“用户明确将此首选项设置为默认值”,这一点很重要您在更新版本的程序中更改默认设置。由于不需要保存到磁盘,它也快一点。