如果我使用默认值中的2个字符串构建1.0应用程序,使用registerDefaults 。
在2.0版本中,我决定删除第一个旧字符串,并将第二个字符串(更改其键字符串)与新的第三个字符串一起移动到数组中。
我该如何处理这个以及如何处理可能通过版本对内容进行的更改。
1.0 Prefs应
StringKey someValue
DateKey 10/10/2010
1.1 Prefs应
StringKey someValue
DateKey 2010/10/10
2.0 Prefs应
Array
Item0 is DateKey 10/10/2010
Item1 is BadString BadBadValue
答案 0 :(得分:1)
如果您在应用版本1.0中使用了registerDefaults:
,则很容易。当您停止注册这些旧值并且用户未更改它们时,它们将从NSUserDefaults中消失。
请向NSUserDefaults询问应转换的所有对象。如果它们存在将它们转换为新格式,请将它们保存在NSUserDefaults中并删除旧值。
这样的事情应该有效
// check if you can get the old object. if it's there it was changed by the user
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"OldKey1"]) {
// old key is present
id oldObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"OldKey1"];
id newObject = ... // convert the old object to the new object
[[NSUserDefaults standardUserDefaults] setObject:newObject forKey:@"NewKey1"];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"OldKey1"];
}
else {
// old key not there, do nothing
}
// register your new defaults...
如果您还没有使用registerDefaults:
,那么您现在遇到了问题。因为您不知道用户是否更改了对象,或者对象只是您的默认对象。并且您不能假设该值仍处于默认状态,因为它具有与默认值相同的值。
但在这种情况下该怎么办?我可能会将值重置为默认值并显示一个UIAlert,告诉用户检查首选项,因为我犯了一个错误: - )