如果您在registerDefaults:
应用程序的 1.0 版中使用过,这很容易。当您停止注册这些旧值并且用户没有更改它们时,它们会从 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 告诉用户检查首选项,因为我做错了:-)